Question

Quelle est la manière la plus simple de créer une table de hachage (ou un tableau associatif...) en Java ?Mon google-fu a trouvé quelques exemples, mais existe-t-il une manière standard de procéder ?

Et existe-t-il un moyen de remplir la table avec une liste de paires clé->valeur sans appeler individuellement une méthode add sur l'objet pour chaque paire ?

Était-ce utile?

La solution

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

Les deux classes peuvent être trouvées dans le package java.util.La différence entre les 2 est expliquée ci-dessous Entrée FAQ de jGuru.

Autres conseils

Vous pouvez utiliser des doubles accolades pour configurer les données.On appelle toujours add, ou put, mais c'est moins moche :

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

N'oubliez pas non plus que Map et Hashtable sont génériques dans Java 5 et versions ultérieures (comme dans toute autre classe du Cadre de collecte).

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

Quoi Edmond dit.

Quant à ne pas appeler .add tout le temps, non, pas de manière idiomatique.Il y aurait différents hacks (le stocker dans un tableau puis le mettre en boucle) que vous pourriez faire si vous le vouliez vraiment, mais je ne le recommanderais pas.

Et existe-t-il un moyen de remplir la table avec une liste de paires clé->valeur sans appeler individuellement une méthode add sur l'objet pour chaque paire ?

Un problème avec votre question est que vous ne mentionnez pas la forme sous laquelle se présentent vos données.Si votre liste de paires était une liste d’objets Map.Entry, ce serait assez simple.

Juste pour jeter cela, il existe une classe (très décriée) nommée java.util.Properties qui est une extension de Hashtable.Il n'attend que des clés et des valeurs de chaîne et vous permet de charger et de stocker les données à l'aide de fichiers ou de flux.Le format du fichier qu'il lit et écrit est le suivant :

key1=value1
key2=value2

Je ne sais pas si c'est ce que vous recherchez, mais il existe des situations où cela peut être utile.

Il est important de noter que la fonction de hachage de Java n'est pas optimale.Si vous voulez moins de collisions et une élimination presque complète du rehachage à environ 50 % de capacité, j'utiliserais un algorithme Buz Hash. Buz Hash

La raison pour laquelle l'algorithme de hachage de Java est faible est la plus évidente dans la manière dont il hache les chaînes.

"a".hash() vous donne la représentation ASCII de "a" - 97, donc "b" serait 98.L’intérêt du hachage est d’attribuer un nombre arbitraire et « aussi aléatoire que possible ».

Si vous avez besoin d'une table de hachage rapide et sale, utilisez certainement java.util.Si vous recherchez quelque chose de robuste et de plus évolutif, j'envisagerais d'implémenter le vôtre.

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

mettre des valeurs ...

obtenir le maximum

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

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top