2012-01-25 25 views

Respuesta

12

Esto se puede hacer con un estándar de SortedMap:

Map<String,V> tailMap = myMap.tailMap(prefix); 
boolean result = (!tailMap.isEmpty() && tailMap.firstKey().startsWith(prefix)); 

mapas no clasificados (por ejemplo, HashMap) no admite intrínsecamente las búsquedas de prefijos, por lo que deberá iterar sobre todas las teclas.

+1

Como estoy usando un hashmap puedo deducir que puedo hacer un mapa de árbol de la siguiente manera: 'TreeMap treeMap = new TreeMap(); treeMap.putAll (Hashmap); ' – Edd

+3

@Edd: O, aún más simple,' TreeMap TreeMap = new TreeMap (Hashmap); ' – NPE

2

en el mapa, se puede obtener un juego de llaves, y en caso de que sean de cuerda, puede iterar lo largo de los elementos del conjunto y comprobar para startsWith("abc")

+0

gracias, puedo ver que esto funcionaría aunque esperaba no tener que repetir el conjunto de claves – Edd

+0

@Edd ¿Por qué no? Está optimizado por java guys para ser utilizado de esta manera;) –

+0

resulta en una mayor complejidad ciclomática a menos que lo hagas en un método separado y no tengo una clase obvia para poner tal método así que esperaba que no necesitaría crear una nueva clase de utilidad para mapas con un solo método en ... parece que soy perezoso cuando digo eso, pero sería útil si hubiera un método de utilidad listo para esto ... ilusión;) – Edd

0

Para construir en Adel Boutros respuesta/comentario acerca de la eficiencia de las teclas de iteración, puede encapsular la iteración de clave en una subclase o decorador Map.

Extender HashMap le daría una clase para poner el método y mantener el código específico del mapa fuera de su método, lo que reduce la complejidad y hace que el código sea más natural de leer.

+0

Esto significaría mi HashMap tendría que ser una instancia de la HashMap extendida y me tiene que realizar un lanzamiento desde Mapa (si el mapa fue declarado como Mapa) para usar el método. Pone el código en un lugar ordenado, pero probablemente no sería utilizable – Edd

+0

Sí. O puede hacer 'MyMapExtension m = new MyMapExtension (myMap);' O puede ir con una solución de decorador para envolver el mapa. Ambos leerían de manera similar a su idea original. –

+0

Ya veo ... Supongo que la opción del decorador evitaría que se cree una nueva instancia del mapa, por lo que debería ser más eficiente – Edd

Cuestiones relacionadas