如何将一个数组转换成一个集合,我们首先想到的一个方法是通过java自带的api实现,

Arrays.asList(T t);
使用这种方式将数组转成集合的话,需要特别注意,这个api返回的ArrayList并不是我常用的java.util.ArrayList,他是一个Arrays的一个内部类,

java.util.Arrays$ArrayList
这个类被定义长一个定长的集合,他直接集成AbstractList类,并且没有重写,add,del,set这些方法,所以使用这个api转换数组集合的时候,需要特别注意,不能进行这一类操作,否则会抛出与异常。

Exception in thread “main” java.lang.UnsupportedOperationException

at java.util.AbstractList.add(AbstractList.java:148)

at java.util.AbstractList.add(AbstractList.java:108)

这是其中一个坑

还有另外一个就是如果使用Arrays.asList()方法生成的集合,如果原先的数组修改了元素,那么新生成的集合的元素也会对应修改,

这里我们可以通过把对象打印出来得到结果

User[] a = new User[]{new User(“a”, “a”, 3)};
List lt = Arrays.asList(a);
List ddd = new ArrayList<>();
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
ddd.add(a[i]);
}
a[0] = new User(“a”, “b”, 4);
System.out.println(“—–new ArrayList—-“);
for (User user : ddd) {
System.out.println(user);
}
System.out.println(“—-原数组—–“);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
ddd.add(a[i]);
}

System.out.println(“—–Arrays.asList()—-“);
for (User ss : lt) {
System.out.println(ss);
}
demo6.User@675d3402
—–new ArrayList—-
demo6.User@675d3402
—-原数组—–
demo6.User@482f8f11
—–Arrays.asList()—-
demo6.User@482f8f11
可以发现,Arrays.asList 和数组保持一致,二new Arraylist出来的集合则不做修改。这些坑尤为注意

严重怀疑定义这个内部类的意义。。

发表评论

电子邮件地址不会被公开。