2010-08-05 22 views
7

Estoy usando Java y estoy buscando colecciones de cadenas (conjuntos y listas) que estén optimizadas en el espacio y sean rápidas. Mis cadenas son de tamaño fijo: 3 o 5 caracteres de largo.Colecciones de cadenas rápidas en Java

Por favor, sugiérame si hay alguna biblioteca de colecciones disponible que pueda ser más adecuada para mí. Estaba pensando en algunas colecciones basadas en diccionarios.

Gracias.

+7

¿Qué idioma/plataforma? –

+4

¿Cuántas cuerdas tienes, más o menos? ¿Miles? Millones? Miles de millones? –

Respuesta

0

Suponiendo que usted está hablando de C o C++, porque no puedo imaginar cualquier otro idioma en la que alguien podría estar buscando una biblioteca de cadenas, te aconsejo el uso de bstring por Paul Hsieh.

Aunque nunca lo he usado, porque simplemente no funcionó en mi caso, lo he adaptado a mi propio uso en 2007 tomando sus conceptos como base. Está muy bien documentado y, al menos, puedes aprender mucho acerca de las cadenas que van a esos enlaces y leer el material de Paul.

1

Si quisiera velocidad, usaría C++ y el STL y una clase de cadena personalizada fijada a 8 bytes. 8 bytes están bien alineados y son 64 bits, por lo que se pueden comparar en una sola instrucción de máquina.

Usando STL puede elegir usar std :: set, std :: map, unordered_set, std :: list o cualquier otra estructura compatible con STL.

+0

Hola, estoy buscando optimizar el código de Java. La aplicación utiliza muchas colecciones de cadenas y mis cadenas son de tamaños fijos – niraj

+0

@niraj: No dijo eso en su pregunta. Editaré tu pregunta por ti, pero debes indicar qué idiomas y plataformas estás preguntando en tus preguntas. –

3

'colecciones basadas en el diccionario'? HashMap es la opción predeterminada. Es tan rápido como O (1). Y no tiene nada con el tamaño del elemento fijo o no.

3

Si se refiere a una colección de cadenas, iría con el valor predeterminado HashSet de Java. Si necesita algo aún más rápido (en términos de tiempo de búsqueda), puede usar un Trie. Las pruebas dan una búsqueda muy rápida (O (longitud de la cadena)) independientemente del número de cadenas en la estructura de datos, y pueden ser muy compactas.

Pero, por favor probar el código con HashSet primero. Con hasta varios millones de cuerdas de tamaño pequeño, no creo que sea muy lento.

2

Realmente no se puede tener una "colección rápida" en general, porque cada uno estructuras de datos tienen su propia fuerza y ​​debilidad.

Si desea agregar e iterar rápidamente, ArrayList s son buenos. Si realiza una gran cantidad de eliminación, es posible que desee utilizar LinkedList s. Si desea búsquedas rápidas, HashSet s son buenas, etc.

Si tiene acceso concurrente, también hay otras estructuras de datos potencialmente más adecuadas. A veces, la combinación de más de una estructura de datos podría ayudar también.

En resumen, debe decirnos para qué va a utilizar su estructura de datos.