Wie kann ich assoziative Arrays in Java wie in PHP erstellen und abrufen?
Beispielsweise:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Wie kann ich assoziative Arrays in Java wie in PHP erstellen und abrufen?
Beispielsweise:
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Java unterstützt keine assoziativen Arrays, dies könnte jedoch leicht mit a erreicht werden Map
. Z.B,
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
Noch genauer für Ihr Beispiel (da Sie String durch jedes Objekt ersetzen können, das Ihren Anforderungen entspricht) wäre die Deklaration von:
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
Weitere Informationen finden Sie in der offiziellen Dokumentation
NullPointerException
wenn die äußere Karte keine Karte für den Eintrag enthält0
. Ist PHP mit $ arr [0] ['name'] nicht freizügiger (ich kenne diese Sprache überhaupt nicht)?ArrayList
fast allen Fällen wegen (unerwartet?) Leistungsunterschiede. Aber das ist eine andere Diskussion.HashMap
, und schon gar nicht, ohne das Verhalten absichtlich zu bewerten und einen besseren Lastfaktor für Ihren Anwendungsfall zu finden. Der einzige Grund, eine Anfangsgröße anzugeben, besteht darin, dass Sie im Voraus wissen, dass die Karte sehr groß sein wird.HashMap
Verschwenden Sie nicht (viel) Speicher, wenn Sie leer sind. Wenn Sie jedoch eine große Karte erstellen möchten, können Sie mehrere Array-Größen speichern, indem Sie die Größe im Voraus angeben.Java hat keine assoziativen Arrays wie PHP.
Es gibt verschiedene Lösungen für Ihre Aktivitäten, z. B. die Verwendung einer Karte. Dies hängt jedoch davon ab, wie Sie die Informationen nachschlagen möchten. Sie können einfach eine Klasse schreiben, die alle Ihre Informationen enthält, und Instanzen davon in einer speichern
ArrayList
.Und dann...
So können Sie darauf zugreifen wie ...
quelle
Sie können dies über Karten erreichen. Etwas wie
Aber wenn Sie anfangen, Java zu verwenden, werden Sie sicher feststellen, dass das Erstellen einer Klasse / eines Modells, das Ihre Daten darstellt, die besten Optionen sind. Ich würde es tun
quelle
In Java gibt es kein assoziatives Array. Sein nächster Verwandter ist a
Map
, der stark typisiert ist, jedoch eine weniger elegante Syntax / API aufweist.Dies ist der nächste Punkt, den Sie anhand Ihres Beispiels erreichen können:
quelle
LazyMap.decorate
undInstantiateFactory
und Sachen für?Schauen Sie sich die Map- Oberfläche und die konkrete Klasse HashMap an .
So erstellen Sie eine Karte:
So fügen Sie ein Schlüssel-Wert-Paar hinzu:
So rufen Sie den einem Schlüssel zugeordneten Wert ab:
Und natürlich können Sie eine Reihe von Karten erstellen, wie es scheint, was Sie wollen:
quelle
Nun, ich war auch auf der Suche nach einem assoziativen Array und fand die Liste der Karten als die beste Lösung.
quelle
Java-Äquivalent zu Perls Hash
quelle
Java hat keine assoziativen Arrays. Das nächste, was Sie bekommen können, ist die Map-Oberfläche
Hier ist ein Beispiel von dieser Seite.
Wenn ausgeführt mit:
Du wirst kriegen:
quelle
Assoziative Arrays in Java wie in PHP:
Weitere Informationen finden Sie unter Class SoftHashMap: https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
quelle
Verwenden Sie ArrayList <Map <String, String >>
Hier ein Codebeispiel:
Ausgabe :
Produkte: [{id = 0001, name = prod1}, {id = 0002, name = prod2}]
quelle
In JDK 1.5 (http://tinyurl.com/3m2lxju) gibt es sogar einen Hinweis: "HINWEIS: Diese Klasse ist veraltet. Neue Implementierungen sollten die Map-Schnittstelle implementieren, anstatt diese Klasse zu erweitern." Grüße, N.
quelle
Ja, dies erfordert eine Iteration, um den Wert nach Schlüssel zu ermitteln. Wenn Sie jedoch alle benötigen, ist dies die beste Wahl.
quelle
Tatsächlich unterstützt Java assoziative Arrays, die als Wörterbücher bezeichnet werden!
quelle
Wenn ich mehr darüber nachdenke, möchte ich Tupel wegwerfen, um dieses Problem allgemeiner zu lösen. Während Tupel nicht in Java beheimatet sind, verwende ich Javatuples , um mir die gleiche Funktionalität bereitzustellen, die in anderen Sprachen vorhanden wäre. Ein Beispiel für den Umgang mit der gestellten Frage ist
Ich mag diesen Ansatz, weil er mit API-bereitgestellten Klassen und Methoden auf Tripel und andere Gruppierungen höherer Ordnung erweitert werden kann.
quelle
In Bezug auf den PHP-Kommentar "Nein, PHP würde es nicht mögen". Tatsächlich würde PHP weiter tuckern, es sei denn, Sie legen einige sehr restriktive (für PHP) Ausnahme- / Fehlerstufen fest (und vielleicht auch dann nicht).
Was standardmäßig passiert, ist, dass ein Zugriff auf eine nicht vorhandene Variable / ein außerhalb der Grenzen liegendes Array-Element Ihren Wert, den Sie zuweisen, "deaktiviert". NEIN, das ist NICHT null. Nach meinem Verständnis hat PHP eine Perl / C-Linie. Es gibt also: nicht gesetzte und nicht vorhandene Variablen, Werte, die gesetzt sind, aber NULL sind, Boolesche Falschwerte, dann alles andere, was Standardsprachen haben. Sie müssen diese separat testen ODER die in Funktion / Syntax integrierte RECHTE Bewertung auswählen.
quelle