你debug的結果是沒有問題的,我不太明白你疑惑的知識點在哪,我從以下幾個方面回答這個問題。
一、List集合是不去重的
在解釋上面的原因之前,我們要知道一下兩個知識點
例如:
1)List<String>list = new ArrayList();
list.add("a");
向這種如果迭代輸出,會輸出3次,a.list的長度也是3.
2)Set<String>set = new HashSet();
set.add("a");
像這種Set新增重複元素,會進行覆蓋,此時Set集合中只有一個元素。
第一個List:因為物件的建立是在迴圈外,for的每一次迴圈,並沒有建立新的物件,只是每一次for迴圈把同一個物件的屬性值做了修改。所以迴圈10次,雖然集合的長度為10,但是屬於同一個物件。
第二個List:在迴圈外建立了一個物件的引用,但是物件的建立都是在每一個for迴圈建立的,沒迴圈一次,外面的那個引用就紙箱了一個新的物件,所以迴圈10次,建立了10個物件。
第三個List:物件的建立在迴圈裡面,和第二個相同,每一次for迴圈也建立了一個物件,所以迴圈10次,建立了10個物件。
如果是Set集合,則第一種情況只會輸出一個物件,第二種和第三種情況則會輸出10個物件
你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個物件