问题描述
- ArrayList 元素删除问题
-
初始化:
this.attribute = new ArrayList(Arrays.asList(temp.split(" ")));
this.cat_attr = new ArrayList(Arrays.asList(temp.split(" ")));
发现
cat_attr.remove(s);
时,attribute 里面的s元素也会自动删除,这是为什么啊。
解决方案
这两个持有的是同一个数组的首地址引用,操作的同一个数组。
解决方案二:
恩,两个list中都是Arrays.asList对象,所以操作谁,都会影响另一个
如果每个Arrays.asList也是new出来的,就没事
解决方案三:
你要明白 值类型和引用类型的区别
这个你需要自己学习一下二者的区别,你就明白原因了
解决方案四:
我刚试了一下,没有删除啊?
public static void test(){
String str = "a b c d e f g";
List<String> temp = Arrays.asList(str.split(" "));
ArrayList<String> alist1 = new ArrayList<String>(temp);
ArrayList<String> alist2 = new ArrayList<String>(temp);
alist1.remove("g");
for(int i=0; i<alist2.size(); i++){
System.out.println(alist2.get(i));
}
}
解决方案五:
看看源码就知道了,new ArrayList的时候会拷贝一份的,所以不会影响
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
时间: 2024-09-20 00:22:41