Estoy desarrollando una aplicación de Android (Android 1.6), pero esta es probablemente una pregunta más general de Java.Filtrar eficientemente un ArrayList en Java/Android
tengo una ArrayList de aproximadamente 10.000 objetos
los objetos contienen 3 cuerdas (firstName, MiddleName, lastName).
Al usuario se le presenta un "cuadro de búsqueda" en Android donde puede buscar un "objeto" en particular escribiendo una parte del nombre.
Tengo una clase (a la que llamo Filterer) que busca en la lista de 10.000 objetos coincidentes y luego los devuelve como una "sublista".
La búsqueda es un poco lenta (especialmente en un dispositivo con Android) y estoy seguro de que no estoy haciendo la búsqueda/filtrado de la manera más eficiente posible.
¿Alguien tiene alguna sugerencia sobre cómo acelerar mi búsqueda? Mi código está abajo. Una posibilidad de buscar contra una "lista maestra" secundaria que ya tiene toda la información en minúscula y concatenada ... pero puede haber otras formas de mejorar esta búsqueda que también podrían ser útiles.
TIA !!
public void filterNames() {
this.filteredList.clear();
String sv = this.searchString.toString.trim().toLowerCase(); // search value
for (int i = 0; i < this.masterList.size(); i++) {
MyObject d = this.masterList.get(i);
String fn = d.getFirstName().toString().toLowerCase();
String mn = d.getMiddleName().toString().toLowerCase();
String ln = d.getLastName().toString().toLowerCase();
if (fn.indexOf(sv) >= 0 ||
md.indexOf(sv) >= 0 ||
ln.indexOf(sv) >= 0) {
this.currentList.add(d);
}
}
}
Mire aquí por un problema similar: http://stackoverflow.com/questions/2085445/fast-index-for- contiene cadena se pregunta con C++ en mente, pero la solución general (estructuras de datos y algoritmos) es independiente del lenguaje. – WildWezyr