`
lixc
  • 浏览: 27998 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

[转]Arrays.asList()陷阱

    博客分类:
  • java
阅读更多

public class ArrayASListTest
{
     public static void main(String[] args)
    {
          /*
          String[] s = new String[]{"one","two"};
          List wrongList = Arrays.asList(s);
          wrongList.remove(0);
          */
       

        String[] s = new String[]{"one","two"};
        List rightList = new ArrayList(Arrays.asList(s));
        wrongList.remove(0);
   }
}

Arrays.asList()生成的List是java.util.Arrays$ArrayList,它的remove和add实现就是抛出UnsupportedOperationException异常。

改正方法也很简单,换成ArrayList或者LinkedList就可以了


转自:http://blog.csdn.net/yinbodotcc/archive/2009/02/18/3907292.aspx

 

 

其实API里也说明清楚了:

Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.)

如果仔细看,应该也能避免错误

 

分享到:
评论

相关推荐

    Java编程中常见的坑

    使用`Arrays.asList()`方法将数组转换为集合时需要注意,这种方法返回的是一个固定大小的列表,并且不允许修改集合(比如添加或删除元素)。如果尝试修改该集合,将会抛出`UnsupportedOperationException`。 将集合...

    Java程序员容易犯的10个错误

    当使用`Arrays.asList()`方法将数组转换为列表时,返回的是`java.util.Arrays.ArrayList`,这是一个内部静态类,不支持添加或删除元素。如果需要一个可变的ArrayList,应使用构造函数创建新的ArrayList实例,如: ...

    Java开发人员最常犯的10个错误

    当需要将Array转换为ArrayList时,开发者可能误用`Arrays.asList()`。这个方法返回的是`java.util.Arrays.ArrayList`,它是一个固定大小的列表,不支持添加元素。正确做法是使用`ArrayList`的构造函数,如`...

    一口气带你踩完五个 List 的大坑,真的是处处坑啊!

    因此,如果需要一个可变的 List,应使用 `new ArrayList(Arrays.asList(arrays))` 或者 Guava 的 `Lists.newArrayList(arrays)`。此外,使用 `List#subList` 创建的子列表并不是真正的独立列表,它会引用原始列表。...

    详解JAVA高质量代码之数组与集合

    当尝试将基本类型数组转换为List时,Arrays.asList方法只会将整个数组作为一个对象放入List,而不是将每个元素分别添加。要将数组元素分开,需要使用Integer等包装类或者使用专门的工具类如IntStream。 7. **...

    Java 编程 :常见问题汇总

    可以通过使用循环边界检查或使用`Arrays.asList()`将数组转换为列表,利用列表的`get()`方法自动检查边界。 ```java int[] arr = {1, 2, 3}; List<Integer> list = Arrays.asList(arr); int element = list.get...

    java代码-Java 8 stream的简单使用

    例如,`List<String> list = Arrays.asList("a", "b", "c"); list.stream();` 或 `String[] array = {"a", "b", "c"}; Arrays.stream(array);` 2. 中间操作 中间操作如`filter()`, `map()`, `distinct()`, `sorted...

    java ArrayList.remove()的三种错误用法以及六种正确用法详解

    List<Long> list = new ArrayList(Arrays.asList(1L, 2L, 3L, 4L, 5L)); for (int i = 0; i < list.size(); i++) { if (i % 2 == 0) { list.remove(i); } } // 结果:[2, 3, 5] ``` 正确的做法是在删除元素...

Global site tag (gtag.js) - Google Analytics