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);
    }