J'aimerais avoir un objet qui implémente la carte et les interfaces de liste en Java. L'idée est similaire au problème dans cette question:
6 Réponses :
LinkedHashMap fait ce que vous besoin. p>
Tableau de hachage et mise en œuvre de la liste liée de l'interface de la carte, avec ordre d'itération prévisible. Cette implémentation diffère de HASHMAP en ce sens qu'elle conserve une liste doublement liée à travers toutes ses entrées. Em> p>
Il n'y a pas de obtenir la méthode code> pour obtenir des éléments par index
@ADAM: Ensuite, étendez LinkedHashMap et implémentez GET (INT Index) à l'aide de l'itérateur. Vous pouvez même utiliser la matrice d'entrée de support [] appelée table code> (bien que j'utilise l'itérateur pour robustesse).
Comme vous avez remarqué, vous ne pouvez pas implémenter à la fois code> code> et En bref, ce dont vous avez besoin est de 2 vues sur les données, une vue d'implémentation d'une liste code> et d'une autre vue Implémentation de la carte code>. P>.
S'il y a un point de vue dominant (par exemple la carte), vous pouvez donner votre implémentation de carte une méthode La réponse donnée par Paulo Gardedes devrait vous servir. Il existe déjà une mise en œuvre de la carte avec vos besoins. Ma réponse est un peu plus générale, à propos de présenter les mêmes données à l'aide de plusieurs interfaces incompatibles où un simple adaptateur ne suffit pas. P> carte code> sur la même classe. Mais pour ce dont vous avez besoin, cela ne devrait pas non plus être nécessaire. Ce dont vous avez besoin, c'est que les données
code> sont accessibles à la fois par une carte code> et une liste
list code>. Un peu comme accéder à
cartographique code> en tant que jeu dans entrée () ou en tant que collection utilisant carte.values () . P>
liste getaslist () code> qui présente les données sous forme de liste, soutenue par les données de la carte. p>
La carte Je me demande si vous utilisez carte code> et
Les interfaces contiennent des interfaces conflictuelles d'un
Supprimer code> méthode. Vous ne pouvez pas implémenter les deux dans une seule classe car vous ne pouvez pas remplacer la même signature de méthode avec une différence de type de retour uniquement. P>
Liste
Il convient de souligner que la raison de l'erreur est que Tandis que et, en Java, des méthodes ne peuvent pas être surchargées en fonction de leur type de retour, de sorte qu'ils sont des signatures contradictoires et ne peuvent pas être mis en œuvre dans la même classe. P> p> mappe code> contient la définition de la méthode suivante code> Supprimer code>:
list code> définit: p>
Pourquoi ne pas implémenter votre propre interface?
public interface HashListMap { public boolean add(Object arg0); public void add(int arg0, Object arg1); public boolean addAll(Collection arg0); public boolean addAll(int arg0, Collection arg1); public void clear(); public boolean contains(Object arg0); public boolean containsAll(Collection arg0); public Object get(int arg0); public int indexOf(Object arg0); public boolean isEmpty(); public Iterator iterator(); public int lastIndexOf(Object arg0); public ListIterator listIterator(); public ListIterator listIterator(int arg0); public boolean remove(Object arg0); public Object remove(int arg0); public boolean removeAll(Collection arg0); public boolean retainAll(Collection arg0); public Object set(int arg0, Object arg1); public int size(); public List subList(int arg0, int arg1); public Object[] toArray(); public Object[] toArray(Object[] arg0); public boolean containsKey(Object arg0); public boolean containsValue(Object arg0); public Set entrySet(); public Object get(Object arg0); public Set keySet(); public Object put(Object arg0, Object arg1); public void putAll(Map arg0); public Collection values();
Très drôle :) Quel est le point d'utiliser une interface "jamais prise en charge"?
En plus de ce que Dave Costa a dit que vous devriez utiliser LinkedHashMap. C'est la carte mais elle préserve l'ordre des éléments insertion. p>
comme carte qu'il implique la méthode des valeurs (), vous pouvez donc dire Nouvelle ArrayList (Carte.Values ()). Obtenez (0) à imiter la fonctionnalité de la liste. p>
Mais vous pouvez aussi dire map.get ("un") Parce que c'est juste une implémentation de carte. P>
Êtes-vous contre l'extension du
LinkedHashMap CODE>, sinon, pourquoi ne pas essayer d'ajouter le
obtenir (int) code> méthode?
Java.net/ Forum / Topic / JDK / Java-SE / ...
@Adam que ce lien est cassé, mais je suppose que nous savons ce que cela dit, juste de l'URL;)
Si votre carte est immuable et ne dispose pas de clés ou de valeurs nulles, GUAVA
immutablablap code> peut être sauvé. C'est
Keyset () code> de type
immutableset code> qui offre
aschiste () code> vue.