Frage

Was ist der einfachste Weg, eine Hash-Tabelle (oder ein assoziatives Array ...) in Java zu erstellen?Mein Google-Fu hat ein paar Beispiele gefunden, aber gibt es eine Standardmethode, dies zu tun?

Und gibt es eine Möglichkeit, die Tabelle mit einer Liste von Schlüssel-Wert-Paaren zu füllen, ohne für jedes Paar einzeln eine Add-Methode für das Objekt aufzurufen?

War es hilfreich?

Lösung

Map map = new HashMap();
Hashtable ht = new Hashtable();

Beide Klassen finden Sie im Paket java.util.Der Unterschied zwischen den beiden wird im Folgenden erläutert jGuru-FAQ-Eintrag.

Andere Tipps

Sie können zum Einrichten der Daten doppelte geschweifte Klammern verwenden.Sie rufen immer noch add oder put auf, aber es ist weniger hässlich:

private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
    put("foo",      1);
    put("bar",      256);
    put("data",     3);
    put("moredata", 27);
    put("hello",    32);
    put("world",    65536);
 }};

Vergessen Sie auch nicht, dass sowohl Map als auch Hashtable in Java 5 und höher generisch sind (wie in jeder anderen Klasse in Sammlungsrahmen).

Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

Integer one = numbers.get("one");
Assert.assertEquals(1, one);
import java.util.HashMap;

Map map = new HashMap();

Was Edmund sagte.

Was das Nichtaufrufen von .add die ganze Zeit betrifft, nein, nicht idiomatisch.Es gäbe verschiedene Hacks (Speichern in einem Array und anschließendes Schleifen), die Sie durchführen könnten, wenn Sie es wirklich wollten, aber ich würde es nicht empfehlen.

Und gibt es eine Möglichkeit, die Tabelle mit einer Liste von Schlüssel-Wert-Paaren zu füllen, ohne für jedes Paar einzeln eine Add-Methode für das Objekt aufzurufen?

Ein Problem bei Ihrer Frage besteht darin, dass Sie zunächst nicht erwähnen, in welcher Form Ihre Daten vorliegen.Wenn Ihre Liste von Paaren zufällig eine Liste von Map.Entry-Objekten wäre, wäre das ziemlich einfach.

Um das mal an den Nagel zu hängen: Es gibt eine (viel gescholtene) Klasse namens java.util.Properties, die eine Erweiterung von Hashtable ist.Es erwartet nur String-Schlüssel und -Werte und ermöglicht das Laden und Speichern der Daten mithilfe von Dateien oder Streams.Das Format der Datei, die gelesen und geschrieben wird, ist wie folgt:

key1=value1
key2=value2

Ich weiß nicht, ob Sie danach suchen, aber es gibt Situationen, in denen dies nützlich sein kann.

Es ist wichtig zu beachten, dass die Hash-Funktion von Java nicht optimal ist.Wenn Sie weniger Kollisionen und eine fast vollständige Eliminierung des erneuten Hashings bei einer Kapazität von ~50 % wünschen, würde ich einen Buz-Hash-Algorithmus verwenden Buz Hash

Der Grund dafür, dass der Hashing-Algorithmus von Java schwach ist, zeigt sich am deutlichsten darin, wie er Strings hasht.

"a".hash() Geben Sie die ASCII-Darstellung von "a" - 97, Also "b" wäre 98.Beim Hashing geht es darum, eine beliebige und „möglichst zufällige“ Zahl zuzuweisen.

Wenn Sie eine schnelle und schmutzige Hash-Tabelle benötigen, verwenden Sie diese auf jeden Fall java.util.Wenn Sie nach etwas Robustem suchen, das besser skalierbar ist, würde ich die Implementierung Ihres eigenen in Betracht ziehen.

Hashtable<Object, Double> hashTable = new Hashtable<>();

Werte setzen ...

Holen Sie sich max

Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top