Comment obtenir la position de l'élément de Java Carte
J'ai ce Java Carte:
Pouvez-vous me dire comment je peux obtenir de la 6-ème élément de la Carte?
private static final Map<String, Users> cache = new HashMap<>();
est-ce possible? Ou je dois utiliser un autre Java collection?
OriginalL'auteur Peter Penzov | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Bien qu'un peu en retard pour répondre. Mais l'option est à utiliser
LinkedHashMap
: cette carte préserve de la commande, conformément à l'insertion d'éléments, comme tout le monde l'a suggéré. Cependant, Comme un avertissement, il a un constructeurLinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
qui permettra de créer un lien de hachage de la carte dont l'ordre d'itération est l'ordre dans lequel ses entrées dernièreaccessed
. Ne pas utiliser ce constructeur pour ce cas.Cependant, si j'ai besoin de cette fonctionnalité, je voudrais étendre et de mettre en œuvre ma fonction pour ré-utiliser dans la programmation orientée objet.
Maintenant, je peux instancier et peut obtenir un entrée et la valeur de toute façon je veux:
De sortie:
OriginalL'auteur Sage
HashMap
n'est pas bénéficiaire de la commande. Si vous en êtes inquiet au sujet de la commande, vous devez utiliserLinkedHashMap
Maintenant, quand vous mettez un élément qu'il va garder l'ordre, ce que vous avez mis.
Si vous voulez obtenir le 6ème élément, maintenant vous pouvez le faire puisque vous avez vos éléments dans l'ordre.
Exemple
découvrez ma suggestion.
Il ne fonctionne pas.
qu'entendez-vous par pas de travail. vérifier mon exemple
Ok, je peux obtenir un objet de valeur par la valeur de la clé. Dans mon cas, la clé est une chaîne de caractère.
OriginalL'auteur Ruchira Gayan Ranaweera
Avec la goyave est Iterables
OriginalL'auteur kutschkem
Un
HashMap
ne maintient pas l'ordre des éléments insérés. Vous pouvez utilisé unLinkedHashMap
à la place qui maintient l'ordre des éléments insérés.Si vous avez besoin de noter que même un
LinkedHashMap
n'a pas cette méthode qui donne à l'élément à un index particulier. Vous devrez manuellement itérer à travers les entrées et extraire l'élément à la 6ème itération.OriginalL'auteur SudoRahul
La
HashMap
n'a pas défini la commande de clés.C'est pas ordonné.Vous pouvez utiliser
LinkedHashMap
qui permet de stocker vos clés dans l'ordre d'insertion.Vous pouvez les récupérer en appelant keySet().OriginalL'auteur Vignesh Vino
Selon la documentation, table de hachage est une table de Hachage basée sur la mise en œuvre de la Carte d'interface. Cette application fournit toutes les option de la carte des opérations, et autorise les valeurs null et la clé null. (La classe HashMap est à peu près équivalent à la table de hachage, sauf qu'il n'est pas synchronisé et autorise les valeurs null.) Cette classe ne donne aucune garantie quant à l'ordre de la carte; en particulier, il ne garantit pas que l'ordre demeure constante au cours du temps.
C'est pourquoi il n'est pas sage d'utiliser ce type de Collection.
Mise à JOUR:
@Prateek mise en œuvre de LinkedHashMap je dirais quelque chose comme:
private static final Map<String, Users> cache = new LinkedHashMap<>();
?OriginalL'auteur MaVRoSCy
HashMaps ne pas préserver l'ordre:
LinkedHashMap qui garantit un prévisible itération de l'ordre.
Exemple
Il ne fonctionne pas parce que j'ai un Objet pour la deuxième valeur:
LinkedHashMap<String,Object> linkedHashMap = new LinkedHashMap<String,Object>();
Vérifier édité réponse. Je pense que cela va vous aider.
OriginalL'auteur Prateek
Correct!!
vous devrez utiliser d'autres de la collection pour obtenir les valeurs de l'indice(position).
Vous pouvez utiliser ArrayList
private static final Map<String, Users> cache = new ArrayList<>();
?Non, vous cann pas affecter ArrayList instance à la Carte.
List cache = new ArrayList<Users>();
mais alors vous ne pouvez parcourir cette liste et cann pas d'obtenir une valeur par clé.Donc, ce que l'exemple doit être adapté?
OriginalL'auteur Foolish
Un
HashMap
n'ont pas de position. Vous pouvez parcourir sesKeySet
ouEntrySet
, et choisissez le n-ième élément, mais ce n'est pas vraiment la même position. Un LinkedHashMap a une position, car il a une prévisible itération de l'ordre.OriginalL'auteur Kayaman
Si la commande est à dire quelque chose de significatif, vous pourriez envisager d'utiliser un SortedMap.
Mise en œuvre concrète:
TreeMap
OriginalL'auteur vikingsteve
Vous devez utiliser un
LinkedHashMap
afin d'être en mesure de dire l'ordre des éléments insérés.HashMap
n'est pas capable de le faire.OriginalL'auteur Adam Arold
Il n'y a pas d'Ordre dans
HashMap
. Vous pouvez obtenir la liste des clés à l'aidemap.keySet()
mais il n'y a pas de garantie sur la touche set sera dans l'ordre dans lequel vous ajoutez dans. UtilisationLinkedHashMap
au lieu deHashMap
Il sera toujours remise des clés dans le même ordre (insertion)OriginalL'auteur Abimaran Kugathasan
Utilisation LinkedHashMap au lieu de HashMap Il sera de retour des clés dans le même ordre (insertion) lors de l'appel de keySet().
Pour la jument de détails sur LinkedHashMap voir cette
Par exemple, pour obtenir l'élément d'indice spécifique
Créer une nouvelle liste de vos valeurs et de l'obtention de la valeur basée sur l'index.
private static final Map<String, Users> cache = new LinkedHashMap<>();
?Voir le fichier de réponse
OriginalL'auteur rachana