Le Multivéemap classe (Collections Apache Commons) facilite la tâche de travailler avec une carte dont les valeurs sont des collections. Je recherche une classe qui facilite le fonctionnement avec une carte dont les clés sont des objets et des valeurs sont des cartes. P>
J'utilise Java 1.4, vous ne pouvez donc pas utiliser Google Collections ou Generics. P>
3 Réponses :
Carte des cartes est en fait une structure de type arborescente sans nœud racine unique (ainsi que la carte des cartes des cartes ...).
Vous pouvez regarder modèle composite qui est largement utilisé pour la mise en oeuvre des structures d'arbres (si leurs composants ont le même type qui n'est pas le cas que je ressens). P> < P> Une autre solution consiste à implémenter un modèle de domaine simple. Il sera beaucoup plus clair de lire et de maintenir quelque chose comme: p> que p>
La collection de cartes régulière fonctionne pour cela:
Map<Object,Object> mapOfWhatever = new LinkedHashMap<Object,Object>(); Object newObject = new String("object as string"); mapOfWhatever.put(newObject, new LinkedHashMap<Object,Object>()); Map<Object,Object> objectMap = (Map<Object, Object>) mapOfWhatever.get(newObject);
Généralement, on veut ne pas avoir à se soucier de savoir si une clé donnée (première) est déjà dans Mapofmaps code>, par exemple En ce qui concerne
mapofmaps.get ("Premièrement"). Mettez ("Secondkey", valeur) code>. Par exemple, les cartes de Python ont un
SetDefault Code> Méthode
à cette fin.
Si vous avez un L'intelligence dans le hashcode signifie probablement qu'à proposer une manière raisonnable de mélanger les bits des hachons du contenu. Si les valeurs de membre devraient provenir d'ensembles disjoints (par exemple, noms et professions), vous pouvez simplement les utiliser ensemble - imparfait, mais pas cher et rapide - mais si vous avez moins de contrôle / certitude, alors vous devez faire autre chose comme bien (par exemple, faire pivoter les bits d'une des valeurs avant le XOR). P> mappe: {chaîne, mappe: {chaîne, chose}} code> (délibérément pas em> à l'aide de la syntaxe Java pour éviter tout Java1.4 / Java5 Business) Ensuite, vous devriez également déterminer si vous devriez que vous devriez plutôt modéliser que comme
mappe: {tuple: {chaîne, string}, chose} code>. Si les recherches multiples dominent, c'est un bon changement pour faire (à condition que vous impliez un bon
tuple code> qui est égal à () code> correctement et
hashcode () code> intelligemment) mais si vous faites beaucoup d'insertions et de suppression, c'est moins bon. P>
De quel côté avez-vous besoin d'être une carte? Êtes-vous en mappage de la carte à un objet, objet à mapper ou de plan pour mapper?
Vous ne pouvez pas simplement créer une carte? Ou vous voulez être capable de faire quelque chose comme carte.pol (Key1, Key2, valeur)?
Pas que c'est trop pertinent, je suppose, mais je suis curieux: quelle entreprise / industrie (aussi précisément que vous êtes à l'aise de nous dire) nécessite toujours Java 1.4? Même Java 5 a été fini de vie. Java 1.4 a déjà été édit depuis près de 2 ans.
@Dave Java 1.4 n'a pas de génériques (du moins pas la distribution standard; Je comprends qu'il y avait une JSR de quelque sorte qui a été utilisée pour tester des génériques avant de ne faire partie de la spécification de Java 5).
@HANK GAY Je connais au moins une entreprise pharmaceutique qui est toujours sur Java 1.4.
@HANK - Les génériques ne sont pas tenus de disposer d'une datructure "Carte de cartes". A juste besoin de couler plus laids ...
@Andreas_d Je sais, mais @ Dave's Commentaire utilise spécifiquement la syntaxe des génériques.
@HANK une très grande entreprise qui fait des logiciels pour l'industrie du voyage
Il est implicite de votre demande que la clé de carte interne doit être identique à la clé de carte extérieure, auquel cas cela est redondant.
@usersmarvin_ Je ne peux pas dire que je suis surpris par la société pharmaceutique - triste, mais pas surprise. Je am i> surpris par le logiciel de voyage, cependant. Je n'aurais pas attendu que.
Dans notre projet, j'ai utilisé Guava's COM. google.common.collect.table qui convient parfaitement et possède de nombreuses méthodes d'assistance, qui m'a sauvé des tonnes de lignes de code, par exemple: itération sur la carte ... C'est pitié que vous ne puissiez pas utiliser GUAVA. ( Peut-être regarder le code source d'inspiration b>) i> Voir: Types de collecte GUAVA