stusetName?
你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个对象
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有