Jak stworzyć słownik w Javie? [Zamknięte]

236

Próbuję zaimplementować słownik (jak w książce fizycznej). Mam listę słów i ich znaczenie.

Jaką strukturę / typ danych zapewnia Java do przechowywania listy słów i ich znaczenia jako par klucz / wartość.

W jaki sposób, biorąc pod uwagę klucz, mogę znaleźć i zwrócić wartość?

użytkownik1849819
źródło
24
Cóż, w duchu koncentrowania się na pytaniu, a nie na użytkowniku, głosuję, aby ponownie otworzyć. Jestem pewien, że ten użytkownik i tak ukończył kurs. ;) To duplikat stackoverflow.com/questions/1540673/… , ale myślę, że odpowiedzi tutaj są lepsze.
Adi Inbar

Odpowiedzi:

313

Będziesz chciał Map<String, String>. Klasy, które implementują Mapinterfejs obejmują (ale nie wyłącznie):

Każdy jest zaprojektowany / zoptymalizowany do określonych sytuacji (więcej informacji można znaleźć w odpowiednich dokumentach). HashMapjest prawdopodobnie najczęstszy; przejdź do wartości domyślnej.

Na przykład (za pomocą a HashMap):

Map<String, String> map = new HashMap<String, String>();
map.put("dog", "type of animal");
System.out.println(map.get("dog"));
rodzaj zwierzęcia
arshajii
źródło
1
@Cruncher To także implementuje Map(sprawdź javadoc)
arshajii
1
@arshajii mam wątpliwości, że ręcznie mapujemy wszystkie ciągi w słowniku lub mogę powiedzieć, że ręcznie przechowujemy znaczenie wszystkich słów. Więc moje pytanie brzmi, czy istnieje jakiś sposób, jak dB (hałda) plików do pobrania Słownik słów i ich znaczeń / Definicja więc możemy uniknąć dodawania znaczenia każdego słowa ręcznie
Vighanesh Gursale
@VighaneshGursale Musisz użyć metody put, aby zbudować strukturę danych podczas eksploracji. Pomyśl o poleceniu put jako czytaniu pliku z dysku i umieszczaniu go w pamięci (pamięci RAM), abyś mógł z nim pracować. Jeśli masz plik, który chcesz załadować jako strukturę danych przy automatycznym ładowaniu, powinieneś zajrzeć do java spring, ale jego kompleksu.
Dan Ciborowski - MSFT
5
Nawiasem mówiąc, tak naprawdę nie musisz dołączać <Ciąg, Ciąg> po raz drugi. Możesz po prostu zrobićMap<String, String> map = new HashMap<>();
Samuel Noyes,
Zapomniałeś wspomnieć o ConcurrentHashMap, która jest bardziej preferowana niż Hashtable
Arsenius
80

Spowoduje to utworzenie słownika tekstu (ciąg):

Map<String, String> dictionary = new HashMap<String, String>();

następnie używasz go jako:

dictionary.put("key", "value");
String value = dictionary.get("key");

Działa, ale daje błąd, który musisz zachować, aby klasa konstruktora była taka sama jak klasa deklaracji. Wiem, że dziedziczy po klasie nadrzędnej, ale niestety powoduje błąd w czasie wykonywania.

Map<String, String> dictionary = new Map<String, String>();

To działa poprawnie.

SmartK8
źródło
3
dictionary["key"]nie zadziała - tak powinno być dictionary.get("key").
arshajii
21
To prawda, że ​​pewnie C # wślizgnęło się :)
SmartK8,
12

Użyj interfejsu mapy i implementacji takiej jak HashMap

Puyover
źródło
1
Link do rozwiązania jest mile widziany, ale upewnij się, że Twoja odpowiedź jest przydatna bez niego: dodaj kontekst wokół linku, aby inni użytkownicy mieli pojęcie, co to jest i dlaczego tam jest, a następnie zacytuj najbardziej odpowiednią część strony, którą „ ponowne linkowanie na wypadek, gdyby strona docelowa była niedostępna. Odpowiedzi, które są niewiele więcej niż link, mogą zostać usunięte.
FelixSFD