Quiero buscar un mapa hash dependiendo de la entrada del usuario. Supongamos que un usuario da el valor 'A', tengo que mostrarlo comenzando con el nombre de una compañía y si el usuario da el valor 'AB' tengo que mostrarlo comenzando con el nombre de la compañía AB. Estoy almacenando el nombre de la empresa en el mapa hashcómo buscar como el operador LIKe en sql en el hash map en java
Respuesta
Los mapas hash solo son realmente buenos para encontrar coincidencias exactas basadas en una idea de igualdad que puede correlacionarse adecuadamente.
dos opciones:
- sólo tiene que ir con una lista lugar, y buscarla en forma lineal. Para cantidades relativamente pequeñas de datos, es probable que esto funcione absolutamente bien.
- Buscar o implementar un trie (o árbol de prefijo) que básicamente comenzará en un nodo raíz y descenderá para cada carácter que el usuario haya tipeado - los resultados son todos nodos de punto final válidos debajo del nodo alcanzado al final del descenso entrada del usuario.
usted debe buscar en expresiones regulares (expresiones regulares)
http://download.oracle.com/javase/tutorial/essential/regex/
sus nombres de empresas son cadenas, puede utilizar
String regex = "A*";
myString.matches(regex);
Puede recorrer el conjunto de claves y comprobar cada tecla . Por ejemplo:
final String searchPrefix = "AB";
for(String key : map.keySet()){
if(key.startsWith(searchPrefix)){
System.out.println(map.get(key));
}
}
O bien, puede recorrer las entradas en el mapa.
final String searchPrefix = "AB";
for(Entry<String,String> e : map.entrySet()){
if(e.getKey().startsWith(searchPrefix)){
System.out.println(e.getValue());
}
}
Utilice un NavigableSet.
Ejemplo:
NavigableSet<String> company=new TreeSet<String>(); Set<String> filteredSet=company.tailSet(prefix); for(String str:filteredSet) { if(str.startsWith(prefix)) //add to list else break; }
Utilice un radix tree[wiki] o trie[wiki] si usted está preocupado por rendimiento.Las árbol de radix es más eficiente de la memoria en comparación con un trie.
muy buena respuesta (+1) –
@ user426344: También consulte este [blog en autocompletado] (http://sujitpal.blogspot.com/2007/02/three-autocomplete-implementations.html) – Emil
- 1. ¿Cómo implementar un SQL como el operador 'LIKE' en java?
- 2. SQL - buscar base de datos con el operador LIKE
- 3. cfqueryparam con el operador like en ColdFusion
- 4. ¿Cómo buscar la cadena LIKE 'something%' con Java Spring Framework?
- 5. Buscar valores duplicados en Java Map?
- 6. Hash Map en Python
- 7. ¿Cómo evitar la inyección SQL en una consulta SQL con el operador Like utilizando los parámetros?
- 8. Operador Like en Expression Tree
- 9. es el + en + = en un operador de prefijo Map of =?
- 10. ¿Cómo escapar de una cadena para usar con el operador LIKE en SQL Server?
- 11. ¿Cómo usar MySQL como operador en JDBC?
- 12. ¿Cómo atravesar Linked Hash Map en reversa?
- 13. Linq2SQL para producir el operador Like
- 14. SQL LIKE Rendimiento con solo el comodín (%) como valor
- 15. ¿Por qué el operador T-SQL "LIKE" no evalúa esta expresión como creo que debería?
- 16. ¿Puede el operador "IN" usar LIKE-wildcards (%) en Oracle?
- 17. Cómo utilizar el operador IN en linq
- 18. ¿Cómo buscar en redis las claves hash?
- 19. clojure convertir lazy-seq en hash map
- 20. Java Map equivalente en C#
- 21. Consultas utilizando comodines LIKE en el servidor sql
- 22. ¿Qué es un reemplazo adecuado para el operador SQL Like para aumentar el rendimiento?
- 23. C# analógico para SQL en el operador
- 24. operador de JavaScript similar a SQL "como"
- 25. ¿Qué hace el operador | = en Java?
- 26. Anotaciones Java-like en C++
- 27. Map to String en Java
- 28. ¿Cómo funciona STL map :: find sin el operador de igualdad?
- 29. ¿Qué hace el operador "+ =" en Java?
- 30. ¿El operador de energía en Java?
Me parece una mala idea. Para una búsqueda simple de prefijos, regex es overkill ... ¿qué pasa con 'String.startsWith'? –
Nada, pero la pregunta era cómo hacer LIKE, sugiero regex porque podría querer hacer una prueba más compleja más adelante. si es solo hacer: comenzar con la prueba, entonces sí y no es una exageración. ("sí" porque hay una manera más corta de escribirlo, "no" porque creo que Java usa también expresiones regulares para hacer esto en el fondo). –
@ user440336 No, java itera sobre las matrices subyacentes, que es mucho más eficiente que regex. especialmente porque si usa 'String.matches()' varias veces, el mismo patrón se compila una y otra vez ('str.matches (pattern)' es un atajo para 'Pattern.compile (pattern) .matcher (str). matches() ') –