2017-02-17 47 views
0

是否可以使用相同的密鑰創建hashmaps的多個實例?例如:HashMap的多個實例

while(br.readLine != ""){ 
HashMap<Integer,String> hm=new HashMap<Integer,String>(); 
String[] Values = readLine.split(":"); 
    hm.put(1,Value[1]); 
    hm.put(2,Value[2); 
    hm.put(3,Value[3]); 
} 

在這種情況下,會爲循環的每次迭代創建新的hashmap實例還是會重寫?

如果它被覆蓋,如何在這種情況下實現地圖的多個實例?

+0

我希望每個java新手都必須捐贈1美元給慈善機構,用'=='或'!='來比較字符串.... –

回答

3

將爲循環的每次迭代創建一個新的HashMap實例,並且當迭代結束時將因爲沒有對它的引用而符合GC的條件。

您可以在循環外部創建一個List<HashMap<Integer, String>>,並不斷將新創建的地圖添加到循環中的此列表中,以便它們也可以在循環外部訪問。 PS:如果通過「重寫」,你的意思是「覆蓋」,然後是「否」,舊的hashmap實例不是「重用」。對於每次迭代,都會創建一個新實例。

0

在這種情況下,將會爲循環的每次迭代創建新的hashmap實例還是會重寫?

每次創建的Map的新實例。

如果它被覆蓋,如何在這種情況下實現地圖的多個實例?

不是ovvioiden。創建的多個實例。

請記住,每當您使用新的關鍵字時,您正在創建該類的新實例。

一旦循環終止,它們無用。希望你在循環中稍後在hashmap上做一些事情。

+1

謝謝你的選民,但你的評論比投票更有價值。 –

0

首先,您應該從while聲明中移出地圖,否則在每次迭代時都會創建一個新的Map實例,因此您將丟失放入之前使用的Map實例的內容。

我真的沒有看到爲每條包含幾個值的行創建Map實例的真正意義。
這似乎是一個開銷。

爲了不覆蓋與預定義鍵相關的值,可以使用單個映射並將多個String值與該鍵相關聯。
因此,您可以使用的的String而不是StringMap

如果你有3個常量鍵,如你的例子中你可以在循環之前初始化列表。
否則,您可以動態地實例化列表。

Map<Integer, List<String>> map = new HashMap<>(); 

map.put(1, new ArrayList<String>()); 
map.put(2, new ArrayList<String>()); 
map.put(3, new ArrayList<String>()); 

while(br.readLine != nul){ 

    String[] values = readLine.split(":"); 

    map.get(1).add(values[0]); 
    map.get(2).add(values[1]); 
    map.get(3).add(values[2]); 
}