全心思齐网

java高手请进:1.Student stu = new Student(); for(int i = 0; iu003c10;i++){ stu.setName("22"); stu.setA?

你debug的结果是没有问题的,我不太明白你疑惑的知识点在哪,我从以下几个方面回答这个问题。

一、List集合是不去重的

在解释上面的原因之前,我们要知道一下两个知识点

第一个知识点:List集合底层数据结构是一个数组,所以数组的下标可以放任意泛型的数据,包括重复数据。
第二个知识点:Set集合底层是用HashMap实现的,它每一个元素都不能重复。

例如:

1)List<String>list = new ArrayList();

list.add("a");

list.add("a");

list.add("a");

向这种如果迭代输出,会输出3次,a.list的长度也是3.

2)Set<String>set = new HashSet();

set.add("a");

set.add("a");

set.add("a");

像这种Set添加重复元素,会进行覆盖,此时Set集合中只有一个元素。


第一个List:因为对象的创建是在循环外,for的每一次循环,并没有创建新的对象,只是每一次for循环把同一个对象的属性值做了修改。所以循环10次,虽然集合的长度为10,但是属于同一个对象。

第二个List:在循环外创建了一个对象的引用,但是对象的创建都是在每一个for循环创建的,没循环一次,外面的那个引用就纸箱了一个新的对象,所以循环10次,创建了10个对象。


第三个List:对象的创建在循环里面,和第二个相同,每一次for循环也创建了一个对象,所以循环10次,创建了10个对象。


如果是Set集合,则第一种情况只会输出一个对象,第二种和第三种情况则会输出10个对象

匿名回答于2024-05-30 11:45:57


相关知识问答