簡體   English   中英

for循環中的Java HashMap“ put”方法

[英]Java HashMap “put” method in a for loop

我在for循環中使用HashMap時遇到問題。 我做錯什么了嗎? 我有什么需要改變的嗎? 下面是代碼及其輸出。

碼:

public static void main(String[] args) {

    ArrayList<Double> arrBuckets = new ArrayList<Double>(3);

    HashMap<Integer, ArrayList<Double>> hashMap = new HashMap<Integer, ArrayList<Double>>();

    for(int i=1;i<5;i++)
    {
        arrBuckets.clear();
        arrBuckets.add(0,(1.0*i)) ;
        arrBuckets.add(1,(2.0*i)) ;
        arrBuckets.add(2,(3.0*i)) ;

        hashMap.put(i, arrBuckets);
    }

    System.out.println("hashMap : "+hashMap);
}

以下是輸出:

hashMap : {1=[4.0, 8.0, 12.0], 2=[4.0, 8.0, 12.0], 3=[4.0, 8.0, 12.0], 4=[4.0, 8.0, 12.0]}

但是輸出應該像這樣:

hashMap : {1=[1.0, 2.0, 3.0], 2=[2.0, 4.0, 6.0], 3=[3.0, 6.0, 9.0], 4=[4.0, 8.0, 12.0]}

當將一個集合的對象放置在另一個集合中時,您正在傳遞對該對象的引用 ,而不是對象本身的副本。 您僅創建一個列表,並且將這個列表添加了四次。

我建議您在循環內移動新的ArrayList,而不是每次都重復使用該列表。

你可以寫

Map<Integer, List<Double>> map = new HashMap<Integer, List<Double>>();
for (int i = 1; i < 5; i++)
    map.put(i, Arrays.asList(1.0 * i, 2.0 * i, 3.0 * i));
System.out.println("map : " + map);

版畫

map : {1=[1.0, 2.0, 3.0], 2=[2.0, 4.0, 6.0], 3=[3.0, 6.0, 9.0], 4=[4.0, 8.0, 12.0]}

這是因為您始終使用相同的arrayList:結尾處只有一個ArrayList實例,並且它保存上一次迭代的值。

將循環更改為

for(int i=1;i<5;i++)
{
    ArrayList<Double> arrBuckets = new ArrayList<Double>(3);
    arrBuckets.add(0,(1.0*i)) ;
    arrBuckets.add(1,(2.0*i)) ;
    arrBuckets.add(2,(3.0*i)) ;

    hashMap.put(i, arrBuckets);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM