Domanda

Qual è il modo più semplice per creare una tabella hash (o un array associativo...) in Java?Il mio google-fu ha mostrato un paio di esempi, ma esiste un modo standard per farlo?

Ed esiste un modo per popolare la tabella con un elenco di coppie chiave->valore senza chiamare individualmente un metodo di aggiunta sull'oggetto per ciascuna coppia?

È stato utile?

Soluzione

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

Entrambe le classi possono essere trovate nel pacchetto java.util.La differenza tra i 2 è spiegata di seguito Voce delle domande frequenti su jGuru.

Altri suggerimenti

È possibile utilizzare le doppie parentesi graffe per impostare i dati.Chiami ancora add o put, ma è meno brutto:

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);
 }};

Inoltre, non dimenticare che sia Map che Hashtable sono generici in Java 5 e versioni successive (come in qualsiasi altra classe del Quadro delle collezioni).

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();

Che cosa Edmund disse.

Per quanto riguarda il non chiamare .add in continuazione, no, non in modo idiomatico.Ci sarebbero vari hack (memorizzarlo in un array e poi ripeterlo in loop) che potresti fare se lo volessi davvero, ma non lo consiglierei.

Ed esiste un modo per popolare la tabella con un elenco di coppie chiave->valore senza chiamare individualmente un metodo di aggiunta sull'oggetto per ciascuna coppia?

Un problema con la tua domanda è che non menzioni in quale forma sono i tuoi dati per cominciare.Se il tuo elenco di coppie fosse un elenco di oggetti Map.Entry, sarebbe piuttosto semplice.

Giusto per buttarlo via, esiste una classe (molto diffamata) denominata java.util.Properties che è un'estensione di Hashtable.Si aspetta solo chiavi e valori String e consente di caricare e archiviare i dati utilizzando file o flussi.Il formato del file che legge e scrive è il seguente:

key1=value1
key2=value2

Non so se è quello che stai cercando, ma ci sono situazioni in cui può essere utile.

È importante notare che la funzione hash di Java non è ottimale.Se desideri meno collisioni e l'eliminazione quasi completa del re-hashing con una capacità di circa il 50%, utilizzerei un algoritmo Buz Hash Buz Hash

Il motivo per cui l'algoritmo di hashing di Java è debole è più evidente nel modo in cui esegue l'hashing delle stringhe.

"a".hash() darti la rappresentazione ASCII di "a" - 97, COSÌ "b" sarebbe 98.Lo scopo principale dell'hashing è assegnare un numero arbitrario e "il più casuale possibile".

Se hai bisogno di una tabella hash veloce e sporca, usala assolutamente java.util.Se stai cercando qualcosa di robusto e più scalabile, cercherei di implementarne uno tuo.

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

mettere valori ...

ottieni il massimo

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

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top