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

快速解決List集合add元素,添加多個(gè)對(duì)象出現(xiàn)重復(fù)的問題

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

首先我們?cè)趎ew 一個(gè)對(duì)象的時(shí)候,對(duì)象的id是唯一確定的;將對(duì)象add入list中時(shí),放入list中的其實(shí)是對(duì)象的引用 ;而每次循環(huán)只是簡單的set 對(duì)象的屬性,set新的屬性值,而add進(jìn)list中的對(duì)象還是同一個(gè)對(duì)象id,也就是同一個(gè)對(duì)象;

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

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

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

new的對(duì)象應(yīng)該放在for循環(huán)內(nèi),每循環(huán)一次重新new一個(gè)新對(duì)象

補(bǔ)充知識(shí):兩個(gè)list高效取出其中新增和相同的數(shù)

兩個(gè)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 ,更新的數(shù)據(jù)
      if (map.containsKey(j)){
        map.put(j,1);
      }else {
        //value為2 ,新增的數(shù)據(jù)
        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元素,添加多個(gè)對(duì)象出現(xiàn)重復(fù)的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

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

    Java超詳細(xì)講解三大特性之一的封裝

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

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

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

    RocketMQ事務(wù)消息機(jī)制詳解

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

    MapReduce2框架的原理解析

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

    spring整合redisson開啟緩存方式

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

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

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

    Java數(shù)據(jù)結(jié)構(gòu)--時(shí)間和空間復(fù)雜度

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

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

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

    詳解JAVA 抽象類

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

    Mybatis結(jié)果生成鍵值對(duì)的實(shí)例代碼

    這篇文章主要介紹了Mybatis結(jié)果生成鍵值對(duì)的實(shí)例代碼,以及MyBatis返回Map鍵值對(duì)數(shù)據(jù)的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下
    2017-02-02

最新評(píng)論