`
bo_hai
  • 浏览: 564257 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Arrays.asList 使用注意事项

阅读更多

看下面的代码:

import java.util.Arrays;
import java.util.List;


public class TestAsList {

	public static void main(String[] args) {
		String[] str = new String[]{"1","2","3"};
		List<String> list = Arrays.asList(str);
		list.add("4");
	}
}

 

你们猜猜,有问题吗?

运行程序,报以后错误:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:131)
	at java.util.AbstractList.add(AbstractList.java:91)
	at test.TestAsList.main(TestAsList.java:12)

 

分析原因:

list 的值是数据传化而来,因此list的长度是固定的。程序运行到 list.add("4")时,程序出错了。

解决办法如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class TestAsList {

	public static void main(String[] args) {
		String[] str = new String[]{"1","2","3"};
		List<String> list = new ArrayList<String>(Arrays.asList(str));
		list.add("4");
		System.out.println(list.size());
	}
}

 

总结:使用asList 时要注意。

1
2
分享到:
评论
3 楼 zhongdw 2013-06-28  
这个问题是因为Array.ArrayList而不是java.util.ArrayList.
那个Array.ArrayList里面没有实现add方法,是继承的AbstractList.
当调用add方法的时候,会去调用AbstractList的add方法。
而AbstractList里面的add方法是如下的:
public void add(int index, Object element) {
    throw new UnsupportedOperationException();
}
所以就报UnsupportedOperationException了
2 楼 xiangxm 2013-05-15  
正好在看这个问题。
1 楼 duanjiangong 2011-11-16  
看了看Array.asList的源码,这个地方并不是因为数组传递过来导致,是因为Array类实现了private的ArrayList,那个数组长度是final类型的。

相关推荐

    详解Java如何在Array和List之间进行转换.rar

    三、数组转换注意事项 - 类型匹配:数组和List的元素类型必须一致,否则会抛出ClassCastException。 - 容量问题:在从List转换为数组时,要确保数组的容量足够大,否则会导致ArrayIndexOutOfBoundsException。 - ...

    Java程序员们最常犯的10个错误

    **注意事项**: - 在不需要线程安全性的情况下,优先选择`HashMap`。 - 如果需要保持插入顺序,则可以考虑使用`LinkedHashMap`。 - 如果需要排序功能,则可以选择`TreeMap`。 #### 错误五:在集合中误用原始类型 ...

    java中的Arrays这个工具类你真的会用吗(一文秒懂)

    4. **注意事项** 当使用`Arrays`类进行操作时,确保了解每个方法的要求,比如数组是否需要预先排序(对于`binarySearch`),以及方法返回值的含义(负数通常表示未找到)。 5. **总结** `Arrays`类是Java中一个...

    Java中数组与集合的相互转换实现解析

    Java中数组与集合的相互转换实现解析 Java中数组和集合是两种不同的数据结构,数组是一种固定长度的数据结构,而集合是一种可变长度的数据结构。...但是需要注意在使用这些方法时的注意事项,以免出现异常。

    String[] list 相互转化

    ### 注意事项 1. **类型安全**:在转换时确保正确地处理类型转换,例如使用 `(String[])` 显式地将数组转换为 `String[]`。 2. **性能考量**:频繁地进行数组和列表之间的转换可能会对性能造成影响,特别是在处理...

    Java编程中常见的坑

    `subList`的使用注意事项 `List.subList()`方法用于获取列表的一个视图。需要注意的是,这个视图与原始列表是关联的,任何对视图的修改都会影响到原始列表,反之亦然。因此,在处理`subList`时需要格外小心,尤其...

    把Java数组转换为List时的注意事项

    当然,我们可以使用Arrays.toList方法,但是如果没有慎重思考随便使用几乎肯定会产生令人讨厌的意外。考虑完下面这段程序并预测其输出你明白我的意思了: package com.wordpress.mlangc.arrays; import java.util....

    阿里开发规范(集合与并发处理)

    subList 场景中的注意事项 **强制规定**:在 `subList` 场景中,需要注意对原始集合元素的增删操作,这些操作都可能导致子列表的遍历、增删产生 `ConcurrentModificationException` 异常。 **说明**:在使用 `...

    vuex学习网址111111111

    **注意事项**: - 通过 `asList()` 转换得到的列表是不可变的,这意味着不能向其中添加或删除元素。 - 对原数组的修改会直接影响到通过 `asList()` 创建的列表,反之亦然。因此,在使用该方法时需要注意不要修改原始...

    java List、Set与Array之间的相互转换

    4. **注意事项** - 在转换过程中,需要注意数据类型的一致性。例如,如果你的数组或集合包含自定义对象,那么在转换时需要考虑对象的`equals()`和`hashCode()`方法,以确保Set能正确识别重复元素。 - 当从List...

    Java 在 Array 和 Set 之间进行转换的示例.rar

    3. **注意事项:** - **数据丢失**:当从Array转换到Set时,如果Array中有重复元素,Set会自动去除重复,因为Set不允许重复元素。 - **类型安全**:在进行转换时,确保源类型和目标类型匹配,否则可能会出现...

    android shortcut桌面快捷方式demo

    ### 注意事项 1. **权限**:在AndroidManifest.xml中添加`&lt;uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /&gt;`权限,尽管在大多数情况下不再需要,但某些设备可能仍需要此权限...

    merginUtils

    6. **注意事项** 在实际使用中,需要确保输入的列表和映射的类型兼容,以避免运行时类型转换异常。此外,如果使用自定义对象,确保它们正确实现了equals()和hashCode()方法,以确保比较和合并的正确性。 总结,...

    Java实现遍历一个数组

    6. **注意事项** - 遍历数组时要确保索引不会超出数组边界,避免`ArrayIndexOutOfBoundsException`异常。 - 对于多维数组,遍历方式会有所不同,需要对每一层进行循环。 - 在遍历过程中,应避免修改数组,否则...

    通过封装的工具类,来计算XIRR内部收益率

    5. **注意事项**: - 日期必须按照时间顺序排列,并且与现金流一一对应。 - 首次现金流(通常是投资)通常是负数,后续现金流可以为正(收益)或负(支出)。 - 精度和最大迭代次数应根据实际需求进行设置,以...

    java 求两个数组中重复元素源代码

    5. **注意事项**: - 考虑到数组长度,大数据量时需考虑性能影响。 - 处理重复元素时,应考虑元素类型,对于非基本类型,需要实现equals()和hashCode()方法以正确判断相等性。 - 如果数组中有null元素,处理时...

    动态注册快捷方式和删除快捷键方式

    ### 五、注意事项 1. 动态快捷方式的数量受到系统的限制,通常不超过4个。 2. 快捷方式的更新可能不会立即生效,系统会进行批处理以优化性能。 3. 考虑到用户界面一致性,图标应遵循Material Design指南。 4. 为了...

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

    List 转换注意事项 在处理 List 时,转换操作是常见的需求,如从数组转换为 List。如前所述,直接使用 `Arrays#asList` 创建的 List 是不支持修改操作的。因此,如果需要一个可变的 List,应使用 `new ArrayList...

    jdk1.8.0-301版本安装包

    **三、JDK 1.8.0_301的使用注意事项** 1. **安全更新**:保持JDK版本的及时更新,以获得最新的安全补丁和性能提升。 2. **内存设置**:根据实际应用需求调整JVM的初始堆大小和最大堆大小,例如通过`-Xms`和`-Xmx`...

    Java Arrays工具类用法详解

    4. 使用Arrays类的注意事项 在使用Arrays类时,需要注意以下几点: * Arrays类中的方法均为static修饰的,可以直接通过Arrays.xxx(xxx)的形式调用方法。 * asList(T... a)方法返回的List对象,是由所给的数组a来...

Global site tag (gtag.js) - Google Analytics