2013-08-11 19 views
7

Więc stworzyłem hashmap, ale muszę uzyskać pierwszy klucz, który wprowadziłem. Jest to kod używam:Pierwsze pierwsze rzeczy w HashMap?

pierwsze:

public static Map<String, Inventory> banks = new HashMap<String, Inventory>(); 

drugie:

for(int i = 0; i < banks.size(); i++) { 
    InventoryManager.saveToYaml(banks.get(i), size, //GET HERE); 
} 

gdzie jest napisane // DOJECHAĆ chcę uzyskać ciąg z hasmap. Dzięki za pomoc.

Odpowiedz

14

HashMap nie obsługuje kolejności wstawiania kluczy.

LinkedHashMap powinien być używany, ponieważ zapewnia przewidywalną kolejność iteracji, która jest zwykle kolejnością włożoną do mapy (kolejność wstawiania).

Możesz użyć metody MapEntry do iterowania na LinkedHashMap. Oto, co musisz zrobić w swoim kodzie. Najpierw zmienić mapę banków z HashMap do LinkedHashMap:

public static Map<String, Inventory> banks = new LinkedHashMap<String, Inventory>(); 

a następnie po prostu iteracyjne to tak:

for (Map.Entry<String, Inventory> entry : banks.entrySet()) { 
    InventoryManager.saveToYaml(entry.getValue(), size, entry.getKey()); 
} 

Jeśli wystarczy pierwszy element LinkedHashMap następnie można to zrobić:

banks.entrySet().iterator().next(); 
+3

To nie odpowiada na pytanie. – Bohemian

+0

@Bohemian Zaktualizowano odpowiedź, podając więcej szczegółów. –

+0

Hmmm, właśnie skopiowałeś moją odpowiedź. Możesz przynajmniej dać mi kredyt ... –

6

Odpowiadając na pytanie w tytule: zdobyć pierwszy klucz, który został wstawiony, to zrobić:

public static Map<String, Inventory> banks 
    = new LinkedHashMap<String, Inventory>(); 

String firstKey = banks.keySet().iterator().next(); 

Zauważ, że musisz użyć LinkedHashMap, aby zachować to samo zamówienie reklamowe podczas iteracji na mapie. Aby powtórzyć każdy z kluczy w kolejności, zaczynając od pierwszego, wykonaj to (i uważam, że jest to zamierzone):

for (Map.Entry<String, Inventory> entry : banks.entrySet()) { 
    InventoryManager.saveToYaml(entry.getValue(), size, entry.getKey()); 
}