`

Java中几个容易忽略的问题

    博客分类:
  • java
 
阅读更多

1.数组转换成list

 

将数组转成成List一般使用Arrays.asList()这个方法。

List<String> staticList = Arrays.asList(strArray);

查看源代码可以看到,这里生成的List是Arrays的内部静态类,这个List继承了了AbstractList,但有一些方法没有实现。比如add,delete方法。所以这里直接生成的不能对List的大小进行改变。如果直接调用add或者其他方法会抛出:UnsupportedOperationException()。

 

那么,如何才能将数组转换成List并且可以进行更改列表大小呢?

可以直接这样使用:

 

List<String> arrayList = new ArrayList(Arrays.asList(strArray));

 

将两个list输出Class可以见到不一样的结果。

System.out.println(staticList.getClass());

 

System.out.println(arrayList.getClass());

输出:

class java.util.Arrays$ArrayList

 

class java.util.ArrayList

 

2.从List删除元素

先来看看两种错误的删除元素方法。

第一种情况会抛出异常ConcurrentModificationException

 

   @Test
    public void rmFromListFail() {
        //It will throw out ConcurrentModificationException.
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));

        for (String s : list) {
            if (s.equals("a")) list.remove(s);
        }
    }

 这一种情况会得到错误的结果。

 

 

 @Test
    public void rmFromListFail1() {
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
        for (int i = 0; i < list.size(); i++) {
            list.remove(i);
        }
        System.out.println(list);
    }

 成功的方法,使用Iterator

@Test
    public void rmFromListOK(){
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()) {
            String s = iter.next();
         
            if (s.equals("a")) {
                iter.remove();
            }
        }
        
        System.out.println(list);
    

 上面两个问题是我从

http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/

这里挑选出来的,还有其他的问题大家可以看一下。

分享到:
评论

相关推荐

    浅谈Java中的几种随机数

    众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相 同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。

    JAVA面试题最全集

    5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10.session bean 和 entity bean的区别 11.ejb中的transaction机制 ...

    java 面试题 总结

    创建了几个String Object? 两个 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ ...

    汉字转换拼音 java

    在很多地方都可以用的 这是一个通用的汉字转换拼音 只要写几换代码就可以了 说的再好也不如下个用用JAVA做的

    java基础心得总结.rar

    描述java基础容易忽略的问题,如下面几个知识点: int a = 1;1会存放在栈里 String s1 = "thanks";thanks会存放在data segment里 String s2 = new String("thanks");thanks会存放在data segment里 String a ="th...

    java初学者的工具ppt文件

    嗯,这是个容易但又绝对不应该忽略的问题,你确信自己对Java感兴趣、而且又有吃苦的准备,那你才可能学好Java!如果具备这两点条件,就请继续往下看…… 2. 准备一下 请不要把你的学习Java之路和其它计算机技术分开...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中,把定义数据类型的能 力作为一种很重要的能力来对待。在面向...

    JAVA面试题JAVA面试题JAVA面试题JAVA面试题

    我们毕业生如何在面试前对以上几个方面多加了解和练习,一定会在面试中取得良好的效果,在求职中获得成功 ************************** end 1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与...

    Java根据星期英文首字母判断星期几.rar

    Java根据星期英文的首字母判断星期几,请输入星期几的英文单词的第一个字母,程序即可判断出是星期几,如果第一个字母一样,则继续判断第二个字母。当输入小写字母时,利用switch结构特性执行下一个带break语句的...

    基于Java的自研分布式小文件存储系统设计源码

    本资源提供了一套基于Java的自...这些文件详细展示了如何使用Java、JavaScript、Shell、CSS和HTML等技术构建一个分布式小文件存储系统,该系统支持存储几KB到几百MB之间的文件,非常适合用于学习和参考Java项目的开发。

    java面试题

    答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并...

    超爽的自学课件(java)

    对构建器的定义要涉及函数过载的概念(因为可能同时有几个构建器)。随后要讨论的是清除过程,它并非肯定如想象的那么简单。用完一个对象后,通常可以不必管它,垃圾收集器会自动介入,释放由它占据的内存。这里详细...

    超级有影响力霸气的Java面试题大全文档

    创建了几个String Object? 两个 31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?  SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个...

    Java异常处理.md

    在处理异常时,有几个最佳实践需要遵循。首先,只捕获您知道如何处理的异常,避免捕获所有异常。其次,根据具体情况选择适当的处理方式,例如记录日志、重新尝试操作或返回错误信息。此外,使用finally块释放占用的...

    Java语言的科学与艺术(国外计算机科学经典教材)

     1.5 编程过程的几个阶段  1.6 Java和面向对象范例  1.7 Java和WWW  1.8 小结  1.9 复习题 第2章 编程示例  2.1 “Hello world”程序  2.2 编程过程的观点  2.3 两数相加的程序  2.4 编程习语和模式  2.5 ...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧. 这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1....

    业级超高并发与高可用架构实现 JUC高并发编程 Java.Util.Concurrent源码+原理解析

    此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类,没有这些类,这些功能会很难实现或实现起来冗长乏味。课程从技术原理和细节上,进行非常详细的解读,是目前听过关于JUC企业级高并发最专业的...

    \java超强笔记(超级经典)

    四种元注释:java.lang.annotation中的类 元注释:注释注释的注释,用来限定注释的特征 @Terget 用来限定某个注释的使用范围,可以对什么元素进行注释 @Retention 用来描述注释的有效范围 @Inherited ...

    完成Java面向对象程序设计实验课的心得体会(1).doc

    完成Java面向对象程序设计实验课的心得体会 Java面向对象程序设计实验课的心得体会 经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中...

Global site tag (gtag.js) - Google Analytics