Tengo una situación en la que estoy rellenando un ArrayList
con "TransactionEvent
" s. TransactionEvent
tiene una propiedad "ID de transacción". En la gran mayoría de los casos, cada evento nuevo tiene una ID de transacción mayor que la ID del evento anterior. Sin embargo, esto no está garantizado; es decir, los datos son casi ordenados.Búsqueda eficiente en una lista
Mi pregunta es: ¿cómo puedo realizar búsquedas rápidas basadas en la identificación de la transacción? Mi idea actual es llamar al Collections.binarySearch(...)
y, si esto falla, realizar una búsqueda lineal. Sin embargo, noté que el Javadoc establece que el resultado de binarySearch no está definido, es que los datos están desordenados, así que es posible que tenga que implementar mi propia implementación.
adicional:
- He intentado usar un mapa de índice -> ID de transacción, pero este enfoque es erróneo porque cada vez que se actualiza un elemento de la lista/borrado tengo que reconstruir todo el mapa; es decir, cualquier ganancia se borrará con esto.
- Este no es un caso de optimización prematura: el
List
es la base de unTableModel
que actualmente funciona muy lentamente cuando contiene una gran cantidad de filas (100,000).
Cualquier ayuda apreciada.
¿Esto tiene que ser un ArrayList? p.ej. ¿podrías almacenar los identificadores de transacciones en un HashSet? – nos
Sí, tiene que ser así porque necesito una búsqueda rápida de acceso aleatorio basada en el índice de la fila, así como en la identificación de la transacción (ya que esta lista está debajo de un modelo de tabla). – Adamski