第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

理解ArrayList中clear()背后的邏輯

理解ArrayList中clear()背后的邏輯

繁花不似錦 2023-07-28 10:43:16
我正在使用下面的程序來(lái)查找給定列表中的子序列。當(dāng)我使用 時(shí)clear(), 中的值li也會(huì)被清除。因此,我每次都會(huì)創(chuàng)建一個(gè)新的參考。我想了解這背后的邏輯。難道是我用錯(cuò)了?或者這是我添加到我的參考文獻(xiàn)中l(wèi)i? public static int getTheSubseq(List<Integer> AList){      //  int[][] subsequences = new int[][];      List<List<Integer>> li = new ArrayList<>();      List<Integer> temp = new ArrayList<>();      for (int i = 0; i < AList.size(); i++){          for(int j =i+1; j < AList.size(); j++){              temp.add(AList.get(i));              temp.add(AList.get(j));              li.add(temp);              temp = new ArrayList<>();              //temp.clear();          }      }      System.out.println(li);      return 1;    }
查看完整描述

4 回答

?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

不管你是否調(diào)用temp.clear(),如果你li多次添加對(duì)同一個(gè)List對(duì)象的引用,li將包含對(duì)同一個(gè)List對(duì)象的多個(gè)引用,這意味著li.get(0) == li.get(1),,li.get(0) == li.get(2)等等......


對(duì)這些內(nèi)部之一進(jìn)行更改List將反映在所有其他內(nèi)部List,因?yàn)橹挥幸粋€(gè)List被多次引用。


因此,在循環(huán)的每次迭代中(在將其添加到 之前)分配一個(gè)新ArrayList實(shí)例是正確的做法。templi


List不過(guò),我會(huì)做一些小小的改變 - 在將新的內(nèi)部添加到外部之前創(chuàng)建新的內(nèi)部List:


for (int i = 0; i < AList.size(); i++){

    for(int j =i+1; j < AList.size(); j++){

        List<Integer> temp = new ArrayList<>();

        temp.add(AList.get(i));

        temp.add(AList.get(j));

        li.add(temp);

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

添加元素li不會(huì)生成副本。因此,當(dāng)您調(diào)用時(shí),clear()您將擁有兩個(gè)指向同一個(gè)對(duì)象的temp元素和其中的一個(gè)元素。li

您可能只想temp在內(nèi)循環(huán)中進(jìn)行聲明,這樣您每次都會(huì)得到一個(gè)新的循環(huán),而無(wú)需調(diào)用clear().


查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

當(dāng)您調(diào)用.clear()(或任何其他與此相關(guān)的方法)時(shí),您正在對(duì)相同的引用進(jìn)行操作。temp在這里,如果您不在每次迭代中創(chuàng)建新列表,則會(huì)將 by引用的列表添加到li。當(dāng)您調(diào)用 時(shí)clear(),它們“全部”被清除,因?yàn)樗鼈兌贾赶蛲粋€(gè)對(duì)象。當(dāng)您每次迭代創(chuàng)建一個(gè)新列表時(shí),您將擁有不同的對(duì)象,并且可以獨(dú)立地對(duì)它們進(jìn)行操作。



查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

嘗試這樣做:


public static int getTheSubseq(List<Integer> AList){

  //  int[][] subsequences = new int[][];

  List<List<Integer>> li = new ArrayList<>();

  List<Integer> temp;


  for (int i = 0; i < AList.size(); i++){

      for(int j =i+1; j < AList.size(); j++){

          temp = new ArrayList<>();

          temp.add(AList.get(i));

          temp.add(AList.get(j));

          li.add(temp);

      }

  }

  System.out.println(li);

  return 1;


}


查看完整回答
反對(duì) 回復(fù) 2023-07-28
  • 4 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)