2009-11-14 10 views
5

J'ai une carte triée et je veux référencer ses objets ordonnés par leur position d'index. Est-ce possible? Comment puis-je convertir une carte triée en une liste de tableau tout en maintenant l'ordre, de sorte que je puisse récupérer un objet par son index (ordre). Est-ce la seule façon de le faire?référençant des objets java sur une carte triée par index?

Idéalement je pourrais avoir cette structure, et connaîtrait l'indice d'un objet dans ce strucre et pourrait rertieve en disant:

Object nextObj = structure[4] //this structure is originally a sortedMap 
//SortedMap<String, Object> sortedMap = new TreeMap<String, Object>(); 

Mon problème est que j'ai une carte Sorted pour travailler dans la première place. Y a-t-il un moyen connu de le faire?

Un grand merci pour suggérer des approches à ce sujet.

Répondre

7

Vous pouvez récupérer un tableau de valeur de clé de votre SortedMap en faisant

Object[] objects = structure.entrySet().toArray(); 
Object nextObj = structure[4]; 

Le code ci-dessous montre comment obtenir la clé de l'objet et de la valeur

java.util.Map.Entry<K, V> entry = (java.util.Map.Entry<K, V>) structure[4]; 
K key = entry.getKey(); 
V value = entry.getValue(); 

Edit: échantillon d'obtenir la valeur de l'objet et la clé

+1

entrySet() renverra un ensemble d'objets Map.Entry. Si vous avez besoin d'une valeur, utilisez values ​​(). Et oui, l'itération sur eux gardera l'ordre de tri – Dmitry

+0

Y at-il de toute façon à savoir que l'ensemble renvoyé par entrySet() maintiendra l'ordre de la structure d'où il vient? En d'autres termes, le tableau serait-il trié comme l'original triedMap? – denchr

+0

Cette question a été résolue avant l'actualisation de ma page :) – denchr

5

j'utiliser la structure suivante

List<Pair<String,Object>> mylist; 

L'objet serait toujours inséré/recherché avec l'aide d'un comparateur personnalisé et un ensemble de méthode comme lower_bound/upper_bound/equal_bound comme C++ (voir par exemple here pour une implémentation java)

+0

Nous utilisons tout le temps et il est incroyablement rapide de trouver des trucs. En outre, vous pouvez le personnaliser pour obtenir une sous-liste entre deux clés – Fortyrunner

Questions connexes