2012-05-26 15 views
61

Szukam sposobu na zmianę nazwy klucza Hashmap, ale nie wiem, czy jest to możliwe w Javie.Czy jest możliwa zmiana nazwy klucza Hashmap?

+8

Gosh, mam nadzieję, że nie. Usuwanie i ponowne wprowadzanie pary klucz/wartość wydaje się być najlepszą drogą. Zauważ, że normalnie po prostu obsługujesz referencje na samej mapie. –

+3

Proszę nie modyfikować klucza hash hash! Jeśli masz szczęście, zmienisz go na coś z tym samym hashkodem, a ty będziesz szaleć, próbując dowiedzieć się, co się stało; jeśli masz pecha, otrzymasz wpis, którego nie możesz znaleźć (no, nie do następnego przebudowania całej tabeli). Remove/reinsert jest znacznie czystszy i powinien być dość tani (w końcu to wszystkie odniesienia). –

Odpowiedz

86

Spróbuj usunąć element i umieścić go ponownie pod nową nazwą. Zakładając, że klucze w swojej mapie String, to może być osiągnięte w ten sposób:

Object obj = map.remove("oldKey"); 
map.put("newKey", obj); 
+34

+1. I najprostszym do odczytania jest 'map.put (" newKey ", map.remove (" oldKey "));' i dostarczone zawiera 'oldKey' –

+6

Jeśli chodzi o czytelność, zupełnie się nie zgadzam, ja osobiście wolę widzieć wyraźnie, że obiekt zostanie usunięty z mapy, a następnie dodany. A ponieważ OP wydaje się całkiem nowy dla Javy, postanowiłem to ująć w ten sposób. Jednak ze względu na wydajność, twoja wersja jest oczywiście preferowana (ponieważ nie sądzę, że kompilator zoptymalizuje moją wersję na swój sposób). –

+2

Dla javac 1.8.0_45, wersja jednokreskowa jest krótsza o dwa bajty, co mnie zaskoczyło. Bardziej irytująco z rodzajami ogólnymi nie można przekazać 'obj' do' put' bez rzucania go lub deklarowania go jako innego typu, ale oczywiście przekazanie wyniku 'remove' bezpośrednio działa. –

4

Nie zmieniasz nazwy hashmap, musisz wstawić nowy wpis z nowym kluczem i usunąć stary.

11

przypisać wartość klucza, które muszą zostać zmieniona, do nowego klucza. I usuń stary klucz.

hashMap.put("New_Key", hashMap.get("Old_Key")); 
hashMap.remove("Old_Key"); 
4

Nie można zmienić nazwy/modyfikować hashmap klucz raz dodany.

Jedynym sposobem jest usunięcie/usunięcie klucza i wstawienie nowego klucza i pary wartości.

Powód W HashMap realizacji wewnętrznego klawisz modyfikujący HashMap oznaczone jako ostateczna.

static class Entry<K ,V> implements Map.Entry<K ,V> 
{ 
final K key; 
V value; 
Entry<K ,V> next; 
final int hash; 
...//More code goes here 
} 

dla odniesienia: HashMap

6
hashMap.put("New_Key", hashMap.remove("Old_Key")); 

to zrobi to, co chcesz, ale można zauważyć, że lokalizacja klucza nie zmieniło.

+0

@Vins ponownie przejrzyj dokumentacje: D, remove() zwróci obiekt, sprawdź to https://www.tutorialspoint.com/java/util/hashmap_remove.htm –

+0

moje złe, usunąłem swój komentarz i zagłosowałem na niego. Przepraszam za to. – Vins

Powiązane problemy