Buenas edward a mí se me ocurren varias alternativas:
a) Usar la clase Treeset y apoyarte en el método contains(Object o)
b) Usar la clase Arraylist y apoyarte en el método contains(Object o)
c) Usar vectores y apoyarte en la clase Arrays donde dispones del método sort para realizar ordenaciones. Luego podrías implementar un método de búsqueda propio o usar el método binarySearch para realizar búsquedas.
Para mí la clave de que la búsqueda sea rápida está en que tengas la estructura de datos ordenada en base al criterio de búsqueda. Lo que yo haría sería:
- En primer lugar crear la clase RegistroDatos donde cada registro tiene los atributos nombre, id, edad, apellido, peso, fechaNacimiento
- Definir tres comparadores para poder crear tres clases TreeSet con diferentes criterios de ordenación (por nombre, por edad y por peso)
- Importar los datos a una estructura de datos
- Crear tres estructuras de datos TreeSet donde ordenes los datos (pej. datosPorNombre, datosPorEdad y datosPorPeso) usando el constructor
TreeSet(Comparator<? super E> comparator)
Constructs a new, empty tree set, sorted according to the specified comparator.
Ten en cuenta que vas a tener los datos repetidos en tres estructuras distintas ¿Para qué tener ese coste en espacio o almacenamiento? Pues precisamente para hacer las búsquedas muy rápidas.
- Según la búsqueda que se quiera usar, emplear el método contains aplicado a la estructura de datos correspondiente
En cuestión de búsquedas tener O(1) es prácticamente imposible, si fuera así no sería una búsqueda sino una localización directa, el asunto es tener un coste razonable.
Si lo intentas y pegas el código te comento cómo lo veo, saludos