欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

快速解決List集合add元素,添加多個對象出現重復的問題

 更新時間:2020年08月19日 09:17:15   作者:Ricky Yin  
這篇文章主要介紹了快速解決List集合add元素,添加多個對象出現重復的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

首先我們在new 一個對象的時候,對象的id是唯一確定的;將對象add入list中時,放入list中的其實是對象的引用 ;而每次循環(huán)只是簡單的set 對象的屬性,set新的屬性值,而add進list中的對象還是同一個對象id,也就是同一個對象;

所以每次add之后,list發(fā)現對象引用和之前元素一樣,就覆蓋掉了之前add的對象。所以循環(huán)之后list中的對象是重復的對象。

想要避免這個問題只要每次add時保證對象引用都是不同的即可,即每循環(huán)一次重新new一個對象。

另外如果List集合在循環(huán)內new對象,只會添加最后一個元素。

new的對象應該放在for循環(huán)內,每循環(huán)一次重新new一個新對象

補充知識:兩個list高效取出其中新增和相同的數

兩個list循環(huán),盡量避免雙層循環(huán)以及contains的使用

public static void test(){
    List<Integer> oldList = new ArrayList<Integer>(){{add(1);add(2);add(4);add(5);}};
    List<Integer> newList = new ArrayList<Integer>(){{add(3);add(4);add(5);add(6);}};
    Map<Integer,Integer> 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<Integer,Integer> 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元素,添加多個對象出現重復的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java超詳細講解三大特性之一的封裝

    Java超詳細講解三大特性之一的封裝

    封裝是一個非常廣泛的概念,小到一個屬性的封裝,大到一個框架或者一個項目的封裝,下面這篇文章主要給大家介紹了關于java中封裝的那點事,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Servlet生命周期與工作原理詳解

    Servlet生命周期與工作原理詳解

    這篇文章主要為大家詳細介紹了Servlet生命周期與工作原理的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • RocketMQ事務消息機制詳解

    RocketMQ事務消息機制詳解

    這篇文章主要介紹了RocketMQ事務消息機制詳解,RocketMQ服務端將消息持久化之后,向發(fā)送方返回Ack確認消息已經發(fā)送成功,由于消息為半事務消息,在未收到生產者對該消息的二次確認前,此消息被標記成"暫不能投遞"狀態(tài),需要的朋友可以參考下
    2024-01-01
  • MapReduce2框架的原理解析

    MapReduce2框架的原理解析

    這篇文章主要圍繞MapReduce2框架原理介紹的,文中有詳細的代碼示例,對學習有一定的幫助,需要的朋友可以借鑒參考
    2023-04-04
  • spring整合redisson開啟緩存方式

    spring整合redisson開啟緩存方式

    這篇文章主要介紹了spring整合redisson開啟緩存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java超詳細講解多態(tài)的調用

    Java超詳細講解多態(tài)的調用

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發(fā)出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定
    2022-05-05
  • Java數據結構--時間和空間復雜度

    Java數據結構--時間和空間復雜度

    這篇文章主要介紹了java數據結構的時間和空間復雜度,小編覺得這篇文寫的不錯,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-08-08
  • IntelliJ IDEA中Project與Module的概念以及區(qū)別

    IntelliJ IDEA中Project與Module的概念以及區(qū)別

    這篇文章主要給大家介紹了關于IntelliJ IDEA中Project與Module的概念以及區(qū)別的相關資料,文中通過實例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 詳解JAVA 抽象類

    詳解JAVA 抽象類

    這篇文章主要介紹了JAVA 抽象類的相關資料,文中講解非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • Mybatis結果生成鍵值對的實例代碼

    Mybatis結果生成鍵值對的實例代碼

    這篇文章主要介紹了Mybatis結果生成鍵值對的實例代碼,以及MyBatis返回Map鍵值對數據的實現方法,非常不錯,具有參考借鑒價值,需要的的朋友參考下
    2017-02-02

最新評論