随手记–java集合
今天学习集合的时候,使用 List 的各种方法进行练习
结果碰到了这么一个情况:
package day0316.work;
import java.util.ArrayList;
import java.util.List;
import javax.print.attribute.IntegerSyntax;
import org.junit.Test;
public class Test01 {
@Test
public void test01() {
List list =new ArrayList();
list.add(1);
list.add(1);
Student stu=new Student("张三",12);
list.add(stu);
List list1=new ArrayList();
list1.add(1);
list1.add("eqw");
list.addAll(list1);
// list.clear();//清除集合内所有元素
List list2=new ArrayList();
list2.add(0,100);
list2.add(0,"weq");
list2.add(1);
System.out.println(list2);
list2.remove(1);//删除下标为1的元素
list2.remove(new Integer(1));//删除元素 1
list.addAll(list2);
list2.add(2);
System.out.println("集合2:"+list2);
System.out.println("与集合2是否有交集:"+list.retainAll(list2));
System.out.println("集合内是否存在该元素:"+list.contains(0));
System.out.println("集合内是否存在集合2:"+list.contains(list2));
System.out.println("集合元素个数:"+list.size());
System.out.println("集合是否为空:"+list.isEmpty());
System.out.println("集合:"+list.toString());
System.out.println("集合:"+list);
}
}
```结果:
[weq, 100, 1]
集合2:[weq, 2]
与集合2是否有交集:true
集合内是否存在该元素:false
集合内是否存在集合2:false
集合元素个数:1
集合是否为空:false
集合:[weq]
集合:[weq]
我发现原集合list的内容变成了交集的元素 觉得可能是因为是用list的方法进行交集,方法内存在将交集元素存入原集合的代码,所以原集合list就被覆盖了
询问老师之后,老师让先声明另一个集合,list0,让它的值等于原集合,然后用它来求交集
```java
package day0316.work;
import java.util.ArrayList;
import java.util.List;
import javax.print.attribute.IntegerSyntax;
import org.junit.Test;
public class Test01 {
@Test
public void test01() {
List list =new ArrayList();
list.add(1);
list.add(1);
Student stu=new Student("张三",12);
list.add(stu);
List list1=new ArrayList();
list1.add(1);
list1.add("eqw");
list.addAll(list1);
// list.clear();//清除集合内所有元素
List list2=new ArrayList();
list2.add(0,100);
list2.add(0,"weq");
list2.add(1);
System.out.println(list2);
list2.remove(1);//删除下标为1的元素
list2.remove(new Integer(1));//删除元素 1
list.addAll(list2);
list2.add(2);
System.out.println("集合2:"+list2);
List list0=list;
System.out.println("与集合2是否有交集:"+list0.retainAll(list2));
System.out.println(list0);
System.out.println("集合内是否存在该元素:"+list.contains(0));
System.out.println("集合内是否存在集合2:"+list.contains(list2));
System.out.println("集合元素个数:"+list.size());
System.out.println("集合是否为空:"+list.isEmpty());
System.out.println("集合:"+list.toString());
System.out.println("集合:"+list);
}
}
发现还是不行,为什么内容又被改覆盖呢,
我也不知道对不对,只是我觉得应该是这种赋值方式传递的是地址,那用来做交集的内容其实还是list的内容,所以又被覆盖了
就好像你朋友有座房子,房子指向你朋友,然后这种赋值相当于朋友让房子指向他的同时也指向了你,然后你把房子弄得稀巴烂 其实坏的还是朋友的房子
嗯!!有理 不知道对不对 等以后学完再回来看看