2012-09-07 22 views
6

Tengo una colección de grande número de objetos que están definidos por pares de nombre/valor. Necesito tener acceso rápido a cualquiera de sus valores y poder devolverlos ordenados alfabéticamente por nombre. Primero pensé que podría usar un HashMap para obtener acceso rápido. Pero no me dio ningún encargo. Decidí cambiar a LinkedHashSet.
El problema es que tengo que poder insertar Objetos nuevos en los lugares correctos de la lista, pero LinkedHashSet no permite eso. También necesito poder acceder a los Objetos por su índice y por su nombre.

Estaremos agradecidos por cualquier idea.¿Cómo puedo mantener un hashset ordenado alfabéticamente?

+1

¿Usted intentó 'TreeMap'? – Santosh

Respuesta

11

Puede utilizar la aplicación NavigableMap basado TreeMap

Un árbol Rojo-Negro. El mapa se ordena de acuerdo con el orden natural de sus claves, o mediante un comparador proporcionado en el tiempo de creación del mapa, según el constructor que se utilice.

+0

Parece que esto es lo que necesito. Gracias. – svz

+0

Esta es la respuesta incorrecta. Un TreeMap no garantiza la singularidad como lo hace el Conjunto. Use un TreeSet en su lugar – checklist

+0

Nota: los objetos duplicados no están permitidos en TreeSet pero están permitidos en TreeMap. – Yuci

0

Yo usaría un TreeSet que es un SortedSet. Debe definir su clase personalizada como Comparable en función del nombre y su colección siempre estará ordenada.

Nota: las colecciones ordenadas tienen un tiempo de acceso O (log N).

0

¿Has mirado TreeMap? Está basado en árboles Rojo-Negros que ayudan a mantener el orden, pero aún así brinda un acceso rápido.

14

Por qué no probar TreeSet. ¿Su lista no permite duplicados? Si es así, entonces el conjunto debería estar bien. Como se va a añadir cuerdas y esto implementa Comparador el conjunto se clasificarán automáticamente para usted

Si tuviera

Set<String> s = new TreeSet<String>(); 
s.add("B"); 
s.add("C"); 
s.add("A"); 

entonces el contenido del conjunto sería A, B, C

0

Un TreeMap debe abordar sus requisitos. Si sus claves no son literales, utilice el Comparator apropiado en el constructor TreeMap.

0

Puede utilizar Comparator ..

Collections.sort(yourCollection, new Comparator() { 

    public int compare(YourObject o1, YourObject o2) { 
     // put Comparesion according to your requirement 
     return AnyObject; 
    } 
}); 
Cuestiones relacionadas