Jak mogę tworzyć i pobierać tablice asocjacyjne w Javie tak jak w PHP?
Na przykład:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Jak mogę tworzyć i pobierać tablice asocjacyjne w Javie tak jak w PHP?
Na przykład:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Java nie obsługuje tablic asocjacyjnych, jednak można to łatwo osiągnąć za pomocą Map
. Na przykład,
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
Jeszcze dokładniejszym przykładem (ponieważ możesz zastąpić String dowolnym obiektem spełniającym twoje potrzeby) byłoby zadeklarowanie:
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
NullPointerException
jeśli mapa zewnętrzna nie zawiera mapy do wjazdu0
. Czy PHP nie jest bardziej liberalne z $ arr [0] ['name'] (w ogóle nie znam tego języka)?ArrayList
w prawie wszystkich przypadkach ze względu na nieoczekiwane (?) Różnice wydajności. Ale to kolejna dyskusja.HashMap
, a na pewno nie bez celowej analizy porównawczej zachowania i znalezienia lepszego współczynnika obciążenia dla twojego przypadku użycia. Jedynym powodem do określenia początkowego rozmiaru jest to, że wiesz z góry, że mapa będzie bardzo duża.HashMap
nie marnuje (dużo) pamięci, jeśli jest pusta, ale jeśli zamierzasz stworzyć dużą mapę, możesz zapisać kilka rozmiarów tablicy, określając jej rozmiar z góry.Java nie ma tablic asocjacyjnych jak PHP.
Istnieją różne rozwiązania tego, co robisz, na przykład przy użyciu mapy, ale zależy to od sposobu wyszukiwania informacji. Możesz łatwo napisać klasę, która przechowuje wszystkie informacje i przechowywać ich wystąpienia w pliku
ArrayList
.I wtedy...
Możesz więc uzyskać do nich dostęp jak ...
źródło
Możesz to zrobić za pomocą Map. Coś jak
Ale kiedy zaczniesz używać Java, jestem pewien, że przekonasz się, że jeśli stworzysz klasę / model, który reprezentuje twoje dane, będą to najlepsze opcje. chciałbym zrobić
źródło
W Javie nie ma czegoś takiego jak tablica asocjacyjna. Jego najbliższym krewnym jest
Map
mocno wpisany typ, jednak ma on mniej elegancką składnię / interfejs API.To jest najbliższe, jakie możesz uzyskać na podstawie twojego przykładu:
źródło
LazyMap.decorate
iInstantiateFactory
i rzeczy dla?Spójrz na interfejs Map i na konkretną klasę HashMap .
Aby utworzyć mapę:
Aby dodać parę klucz-wartość:
Aby pobrać wartość powiązaną z kluczem:
I oczywiście możesz stworzyć tablicę map, ponieważ wydaje się, że jest to, czego chcesz:
źródło
Cóż, również szukałem tablicy asocjacyjnej i znalazłem listę map jako najlepsze rozwiązanie.
źródło
Jawny odpowiednik skrótu Perla
źródło
Java nie ma tablic asocjacyjnych, najbliższą rzeczą, jaką możesz uzyskać, jest interfejs Map
Oto próbka z tej strony.
Jeśli działa z:
Dostaniesz:
źródło
Tablice asocjacyjne w Javie jak w PHP:
Więcej informacji znajduje się w części SoftHashMap klasy: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
źródło
Użyj ArrayList <Mapa <Ciąg, Ciąg>>
Oto przykładowy kod:
Wynik :
produkty: [{id = 0001, name = prod1}, {id = 0002, name = prod2}]
źródło
W JDK 1.5 (http://tinyurl.com/3m2lxju) jest nawet notatka: „UWAGA: Ta klasa jest przestarzała. Nowe implementacje powinny implementować interfejs Map zamiast rozszerzać tę klasę”. Pozdrawiam, N.
źródło
Tak, wymaga to iteracji do wyszukiwania wartości według klucza, ale jeśli potrzebujesz ich wszystkich, będzie to najlepszy wybór.
źródło
W rzeczywistości Java obsługuje tablice asocjacyjne, które nazywane są słownikami!
źródło
Zastanawiając się nad tym, chciałbym wyrzucić krotki jako bardziej ogólny sposób radzenia sobie z tym problemem. Krotki nie są rodzime dla Javy, ale używam Javatuples, aby zapewnić mi tę samą funkcjonalność, która istniałaby w innych językach. Przykładem postępowania z zadanym pytaniem jest
Podoba mi się to podejście, ponieważ można je rozszerzyć na potrójne i inne wyżej uporządkowane grupy za pomocą klas i metod udostępnianych przez API.
źródło
Odnośnie komentarza PHP „Nie, PHP nie spodoba się”. W rzeczywistości PHP nadal się ładował, chyba że ustawisz bardzo restrykcyjne (dla PHP) poziomy wyjątków / błędów (a może nawet nie wtedy).
To, co stanie się domyślnie, to to, że dostęp do nieistniejącej zmiennej / elementu poza granicami tablicy „rozbija” twoją wartość, do której przypisujesz. NIE, to NIE jest zero. Z tego, co rozumiem, PHP ma rodowód Perl / C. Są więc: zmienne nieustalone i nieistniejące, wartości, które SĄ ustawione, ale NULL, wartości logiczne Fałsz, a następnie wszystko inne, co mają standardowe języki. Musisz przetestować je osobno, LUB wybrać PRAWĄ ocenę wbudowaną funkcję / składnię.
źródło