L'initialisation des tables de hachage en Java?
En C#, vous pouvez initialiser les tables de hashage (et de nombreux autres types d'objets) à l'aide de ce type de code -
Hashtable table = new Hashtable {{1, 1}, {2, 2}};
Est-il quelque chose comme cela en Java ou avez-vous juste de déclarer la table de hachage en premier et ensuite mettre manuellement des éléments un par un?
Non, Java n'a pas les initialiseurs d'objets.
En C# et en Java il existe de meilleures alternatives pour un
En C# et en Java il existe de meilleures alternatives pour un
Hashtable
classe: C#, préférez Dictionary<TKey, TValue>
, et en Java préfèrent HashMap<K, V>
.OriginalL'auteur Jim_CS | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Cela est répondu ailleurs, mais vous pouvez utiliser un anonyme sous-classe:
Beaucoup de chaudière de la plaque, mais encore un one-liner :). Ce sera, malheureusement, se plaignent également de l'absence de serialVersionUID constante laquelle vous pouvez ajouter ou d'ignorer l'avertissement.
Il s'agit d'une instance d'initialiseur de bloc, plus d'informations ici.
Map
est toujours là, donc, est que la classe englobante. Si la classe englobante a un cycle de vie plus court que leMap
(par exemple, laMap
est de longue vie et de la classe englobante a quelques builder responsable de la création de laMap
), alors vous avez une fuite de mémoire.ouais, un de ces "intelligent, mais pas recommandé d'idées". DBI considérées comme nuisibles 😉
OriginalL'auteur alpian
Dans Google Goyave, si vous voulez immuable carte, vous pouvez utiliser:
jusqu'à 5 paires Clé/Valeur.
Au-delà, vous pouvez utiliser leur ImmutableMap.Constructeur classe:
Toujours pas aussi bien qu'en C#, mais l'API fluent est un peu utile.
makeMap(A a, B b, Object... remaining)
manuellement, puis itérer sur les autres Objets de casting pour A et B en alternance et les ajouter à l'retourné la carte. Pas type-safe, mais concis (utile pour des tests de code peut-être).non seulement ne serait-ce pas type-safe, mais vous ne pouvez même pas faire appliquer la bonne même nombre arg comte. Mais oui, il pourrait e utile dans un cadre moins formel, tel que test-code.
OriginalL'auteur Kevin Welker
Une autre réponse (en plus de l'évident "non, pas de langue maternelle façon de le faire"):
Créer un Tuple dans une classe statique méthode de fabrique avec une fantaisie-pantalon "_" nom par souci de concision:
Si vous voulez autoriser des variations sur ce genre de support de la carte est produite, vous pouvez simplement transmettre que dans la place:
OriginalL'auteur Kevin Welker
Essayez ceci:
OriginalL'auteur ggrigery
Il y a une chose qu'on appelle la double accolade de l'initialisation, ce qui n'est pas aussi beau...
Vous pouvez même spécifier à l'aide de anonyme notation de tableau, puis itérer sur vous-même, comme ceci:
Peut-être faire une fonction d'utilité si vous êtes vraiment en manque de python 🙂
OriginalL'auteur Adam
Un de C#'s caractéristiques qui j'aime bien, c'est sa capacité à initialiser inline comme ça. Malheureusement, Java ne dispose pas de cette fonctionnalité.
La Java
Hashtable
n'a pas de constructeurs qui permettent ce soit. Voir une liste de ses constructeurs dans la documentation de l'API Java:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Hashtable.html
OriginalL'auteur Tyler Treat
Si vous avez besoin d'initialiser une HashMap (table de hachage est obsolète), vous pouvez utiliser un bloc d'initialisation statique.
Exemple:
Espère que cela a aidé, amusez-vous!
OriginalL'auteur SimonSez
Une approche sûre est d'utiliser
ImmutableMap.of
de Goyave et éventuellement enveloppé avecnewHashSet
si la mutabilité est nécessaire:Voici un auto-écrit map builder pour les utiliser, par exemple,
newMap(1, "one", 2, "two", 3, "three")
.OriginalL'auteur Nowaker
je suggère quelque chose comme ceci:
OriginalL'auteur Gal Rom
Ce n'est pas possible en Java. Nous en souffrons tous.
HashMap
accomplit la même chose, bien que. Double-vérifier les réponses sont déjà sur le post de discuter de cette chose même.OriginalL'auteur whysoserious