Je n'ai pas compris le sens de Maps en Java. Quand est-il recommandé d'utiliser une carte au lieu d'une liste?
merci d'avance,
nul
Carte Java: objet qui mappe les clés aux valeurs. Une carte ne peut pas contenir de clés en double; chaque clé peut correspondre à au plus une valeur.
Liste Java: une collection ordonnée (également appelée séquence). L'utilisateur de cette interface a un contrôle précis sur l'endroit où dans la liste chaque élément est inséré. L'utilisateur peut accéder aux éléments par leur index entier (position dans la liste), et rechercher des éléments dans la liste.
La différence est qu'ils sont différents. La carte est un mappage de clés/valeurs, une liste d'une liste d'éléments.
Disons que vous avez un groupe d'étudiants avec des noms et des identifiants d'étudiants. Si vous les mettez dans une liste, la seule façon de trouver l'étudiant avec student_id = 300 est de regarder chaque élément de la liste, un par un, jusqu'à ce que vous trouviez le bon étudiant.
Avec une carte, vous associez l'ID de chaque élève et l'instance d'élève. Maintenant, vous pouvez dire "récupérez-moi l'élève 300" et récupérez cet élève instantanément.
Utilisez une carte lorsque vous devez sélectionner des membres spécifiques dans une collection. Utilisez une liste lorsque cela n'a aucun sens.
Supposons que vous ayez exactement les mêmes instances d'élèves, mais votre tâche consistait à produire un rapport des noms de tous les élèves. Vous les mettriez dans une liste car il ne serait pas nécessaire de choisir des étudiants individuels et donc pas besoin d'une carte.
C'est probablement une bonne idée de réviser Random Access Vs Sequential AccessData Structures . Ils ont tous deux des complexités d'exécution différentes et conviennent à différents types de contextes.
Dépend de vos préoccupations de performance. Une carte plus explicitement un HashMap garantira O(1) sur les insertions et les suppressions. Une liste a au pire O(n) pour trouver un élément. Donc si vous voulez bien expliquer quel est votre scénario, nous pouvons vous aider davantage.
Je pense que c'est beaucoup la question de savoir comment vous souhaitez accéder à vos données. Avec une carte, vous pouvez accéder "directement" à vos articles avec une clé connue, dans une liste vous devrez la rechercher, même si elle est triée.
Comparer:
List<MyObject> list = new ArrayList<MyObject>();
//Fill up the list
// Want to get object "peter"
for( MyObject m : list ) {
if( "peter".equals( m.getName() ) {
// found it
}
}
Dans une carte, vous pouvez simplement taper
Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");
Si vous avez quand même des données à traiter et que vous devez le faire avec tous les objets, une liste est ce que vous voulez. Si vous souhaitez traiter des objets uniques avec une clé bien connue, une carte est meilleure. Ce n'est pas la réponse complète (juste mon 2 ...) mais j'espère que cela pourrait vous aider.
Une carte est utilisée comme association d'une clé et d'une valeur. Avec une liste, vous n'avez essentiellement que des valeurs.
Les index dans List sont toujours int, alors que dans Map, vous pouvez avoir un autre objet comme clé.
Ressources:
Lorsque vous souhaitez mapper au lieu de la liste. Les noms de ces interfaces ont une signification, et vous ne devez pas l'ignorer.
Utilisez une carte lorsque vous souhaitez que votre structure de données représente une correspondance pour les clés des valeurs. Utilisez une liste lorsque vous souhaitez que vos données soient stockées dans un format arbitraire et ordonné.
Map
et List
ont des fonctions différentes.
List
contient la collection d'éléments. Commandé (vous pouvez obtenir un article par index).
Map
contient la clé de mappage -> valeur. Par exemple. mapper la personne au poste: "JBeg" -> "programmeur". Et ce n'est pas ordonné. Vous pouvez obtenir de la valeur par clé, mais pas par index.
Les cartes stockent des objets de données avec des clés uniques, donc fournissent un accès rapide aux objets stockés. Vous pouvez utiliser ConcurrentHashMap afin d'atteindre la concurrence dans les environnements multi-thread. Alors que les listes peuvent stocker des données en double et que vous devez parcourir les éléments de données pour accéder à un élément particulier, vous devez donc fournir un accès lent aux objets stockés. Vous pouvez choisir n'importe quelle structure de données en fonction de vos besoins.