java中将数组转换为集合,不能进行增删操作解惑
2016-06-11 10:36
447 查看
</pre>java中我们经常会使用Arrays.asList(数组);将数组转换为List类型,但是却不能对转换后的List进行增删。示例如下:<pre name="code" class="java">import java.util.*; class ArraysDemo { public static void main(String[] args) { // 定义一个Sting型数组 String[] arr={"abc","abcde","desf","dfdf","fdfee"}; // 将数组转换为List集合 List<String> list=Arrays.asList(arr); // 获取第一元素的值 System.out.println(list.get(1)); // 增加元素 list.add("test"); } }
运行结果: abcde Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(Unknown Source) at java.util.AbstractList.add(Unknown Source) at ArraysDemo.main(ArraysDemo.java:13)<pre name="code" class="java">运行结果报出了UnsuportedOperationException,查阅Arrays.asList()方法源码: @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } /** * @serial include */ //定义私有内部静态类,继承了AbstractList虚类 private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } public int size() { return a.length; } public Object[] toArray() { return a.clone(); } public <T> T[] toArray(T[] a) { int size = size(); if (a.length < size) return Arrays.copyOf(this.a, size, (Class<? extends T[]>) a.getClass()); System.arraycopy(this.a, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } public E get(int index) { return a[index]; } public E set(int index, E element) { E oldValue = a[index]; a[index] = element; return oldValue; } public int indexOf(Object o) { if (o==null) { for (int i=0; i<a.length; i++) if (a[i]==null) return i; } else { for (int i=0; i<a.length; i++) if (o.equals(a[i])) return i; } return -1; } public boolean contains(Object o) { return indexOf(o) != -1; } } 从源码可以得知,Arrays内部实现了私有内部静态类,而且没有实现增删的方法。所以通过asList()生成的List没有增删方法。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树