2010-11-15 28 views
1

J'ai besoin de stocker les données suivantes;Quelle structure de données utiliser?

Clampls = {"23e23e", "ff333g", "fhgswq"," h65h3", "ffwwf", "34rf3"} 
KJAS3.2 = {"f34f4f", "43rf2d", "3rfas1"," 1122d", "fff42", "ff33f"} 
... 

Je pensais à stocker quelque chose comme ça

Name  Tokens 
    .  -> ... , ... , ... , ... 
    .  -> ... , ... , ... , ... 
Clampls -> "23e23e" , "ff333g" , "fhgswq" , ... 
KJAS3.2 -> "f34f4f" , "43rf2d" , "3rfas1" , ... 
    .  -> ... , ... , ... , ... 
    .  -> ... , ... , ... , ... 

donc un peu comme un HashMap. J'ai fait quelques lectures dans mon livre Structures de données & Algorithmes dans Java, R. Lafore et j'ai trouvé ce dont j'ai besoin c'est Separate Chaining/HashChain mais ils l'expliquent en utilisant ses propres classes de structure de données construites.

Existe-t-il une collection "ready made" pour un HashChain que je peux utiliser dans Java? Quelque chose comme

Map<String, []String> theMap = new HashMap<String, []String>(); //just an example 

Répondre

6
Map<String, List<String>> dataStructure = new HashMap<String, List<String>>(); 

dataStructure.put("Clampls", Arrays.asList("23e23e", "ff333g", "fhgswq"," h65h3", "ffwwf", "34rf3")); 
dataStructure.put("KJAS3.2", Arrays.asList("f34f4f", "43rf2d", "3rfas1"," 1122d", "fff42", "ff33f")); 

dataStructure.put("KJAS3.3", new ArrayList<String>()); 
dataStructure.get("KJAS3.3").add("fhgswq"); 
+1

Ça a marché! Bravo – Carlos

2

Votre question n'est pas très claire, cette réponse pourrait être désactivée. Si vous voulez avoir plusieurs valeurs pour une clé donnée, vous devez utiliser un MultiMap. Il n'y a pas une implémentation dans le JDK, mais beaucoup d'entre eux dans des bibliothèques communes, par ex. Google Goyave (contient les anciennes collections Google).

Des alternatives telles que Map<String,List<String>> fonctionnent, mais sont difficiles à utiliser, par ex. vous devez créer la liste "interne" vous-même si une clé n'existe pas.

+2

Est-ce que ça vaut vraiment la peine d'ajouter une nouvelle dépendance à une autre lib et de mémoriser une autre API juste pour éviter 'Map >'? –

+0

@Andreas_D, je dirais oui. Guava est une bibliothèque fantastique et la collection MultiMap lui fera gagner du temps à long terme. – BjornS

+0

@Andreas: Cela dépend. Plus le projet est gros, plus vous avez besoin de cette fonctionnalité, ou d'autres fonctionnalités de cette bibliothèque. Surtout Guava contient beaucoup de choses utiles. Et n'oublie pas que l'approche du bricolage a aussi quelques problèmes (performance, erreurs subtiles peuvent être négligées, "API" compliquée) – Landei