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?
Odpowiedz
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);
+1. I najprostszym do odczytania jest 'map.put (" newKey ", map.remove (" oldKey "));' i dostarczone zawiera 'oldKey' –
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). –
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. –
Nie zmieniasz nazwy hashmap, musisz wstawić nowy wpis z nowym kluczem i usunąć stary.
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");
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
hashMap.put("New_Key", hashMap.remove("Old_Key"));
to zrobi to, co chcesz, ale można zauważyć, że lokalizacja klucza nie zmieniło.
@Vins ponownie przejrzyj dokumentacje: D, remove() zwróci obiekt, sprawdź to https://www.tutorialspoint.com/java/util/hashmap_remove.htm –
moje złe, usunąłem swój komentarz i zagłosowałem na niego. Przepraszam za to. – Vins
- 1. Czy jest możliwa zmiana nazwy instancji SQL Server 2005
- 2. Zmiana nazwy klucza hstore w PostgreSQL 9.2
- 3. Czy możliwa jest zmiana szybkości znacznika HTML <marquee>?
- 4. Możliwa zmiana znaku separatora ścieżki osadzonego zasobu?
- 5. Zmiana nazwy klawiszy słownika
- 6. Zmiana wygenerowanej nazwy klucza obcego w stanie hibernacji
- 7. Czy jest możliwa ogólna nazwa TInterfaceList Delphi?
- 8. Czy jest możliwa wielowierszowa dyrektywa #warning?
- 9. Czy wtyczka kodu jest możliwa w Javie?
- 10. Czy możliwa jest samodzielna siatka kątowa UI?
- 11. Czy możliwa jest internalizacja danych liczbowych AngularJS?
- 12. Czy możliwa jest regulacja wysokości suwaka Materialise?
- 13. Sprawdź, czy obiekt jest instancją String, HashMap lub HashMap []
- 14. Zmiana klucza słownika
- 15. Zmiana możliwa do skopiowania na podstawie motywu
- 16. Zmiana klucza Python Setuptools
- 17. Java - pobierz indeks klucza w HashMap?
- 18. dlaczego zmiana nazwy nie jest aktualnie dostępny
- 19. Zmiana HashMap funkcji skrótu w Java 8
- 20. Czy zmiana nazwy pliku zmieni jego CRC?
- 21. Czy możliwa jest zmiana pozycji przeskoków Bootstrap na podstawie szerokości ekranu?
- 22. Czy możliwa jest zmiana nazw pól na wyjściach zapytania Mongo w PyMongo?
- 23. Czy jest możliwa zmiana wygenerowanego automatycznie kodu obsługi zdarzeń w visual studio?
- 24. Czy podczas budowy zadania Jenkinsa możliwa jest zmiana parametrów budowania w połowie?
- 25. Zmiana nazwy pliku PHP
- 26. Multitekstura LibGDX SpriteBatch jest możliwa?
- 27. Subversion, zmiana nazwy, Wha?
- 28. Zmiana nazwy tabeli dbo.AspNetUsers
- 29. Zmiana nazwy celu iOS
- 30. MySQL - Zmiana nazwy kolumny
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. –
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). –