首先我們在new 一個對象的時候,對象的id是唯一確定的;將對象add入list中時,放入list中的其實是對象的引用 ;而每次循環只是簡單的set 對象的屬性,set新的屬性值,而add進list中的對象還是同一個對象id,也就是同一個對象;
所以每次add之后,list發現對象引用和之前元素一樣,就覆蓋掉了之前add的對象。所以循環之后list中的對象是重復的對象。
想要避免這個問題只要每次add時保證對象引用都是不同的即可,即每循環一次重新new一個對象。
另外如果List集合在循環內new對象,只會添加最后一個元素。
new的對象應該放在for循環內,每循環一次重新new一個新對象
補充知識:兩個list高效取出其中新增和相同的數
兩個list循環,盡量避免雙層循環以及contains的使用
public static void test(){
List oldList = new ArrayList(){{add(1);add(2);add(4);add(5);}};
List newList = new ArrayList(){{add(3);add(4);add(5);add(6);}};
Map map = new HashMap<>();
for (Integer i: oldList ) {
map.put(i,0);
}
System.out.print(map);
for (Integer j: newList ) {
//value為1 ,更新的數據
if (map.containsKey(j)){
map.put(j,1);
}else {
//value為2 ,新增的數據
map.put(j,2);
}
}
System.out.println(map);
for (Map.Entry entry: map.entrySet() ) {
if(entry.getValue().equals(0)){
System.out.println("舊的值:"+entry.getKey());
}
if(entry.getValue().equals(1)){
System.out.println("更新的值:"+entry.getKey());
}
if(entry.getValue().equals(3)){
System.out.println("新增的值:"+entry.getKey());
}
}
System.out.println(map);
}
public static void main(String[] arg){
test();
}
以上這篇快速解決List集合add元素,添加多個對象出現重復的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。