Saltar al contenido

Java: Recuperar un elemento de un HashSet

Nuestro team de expertos pasados muchos días de investigación y recopilación de de información, dimos con la solución, esperamos que resulte de utilidad en tu proyecto.

Solución:

Si sabe qué elemento desea recuperar, entonces ya tiene el elemento. La única pregunta para un Set responder, dado un elemento, es si contains() eso o no.

Si desea iterar sobre los elementos, simplemente use un Set.iterator().

Parece que lo que intenta hacer es designar un elemento canónico para una clase de equivalencia de elementos. Puedes usar un Map para hacer esto. Vea esta pregunta SO o esta para una discusión.

Si estás realmente decidido a encontrar un elemento que .equals() su elemento original con la restricción de que DEBE usar el HashSetcreo que estás atascado iterando sobre él y comprobando equals() tú mismo. La API no te permite agarrar algo por su código hash. Así que podrías hacer:

MyObject findIfPresent(MyObject source, HashSet set)

   if (set.contains(source)) 
      for (MyObject obj : set) 
        if (obj.equals(source)) 
          return obj;
       
   

  return null;

Fuerza bruta y O(n) feo, pero si eso es lo que necesitas hacer…

Puede HashMap en lugar de HashSet.

Vocación ContainsKey() en tu “reconstruido” MyHashObject será primero hashCode()-verifique la colección, y si se encuentra un código hash duplicado, finalmente equals()-verifique su “reconstruido” contra el original, en el que puede recuperar el original usando get()

Esto es O (1) pero la desventaja es que probablemente tendrá que anular ambos equals() y hashCode() métodos.

Parece que esencialmente estás tratando de usar el código hash como un key en un mapa (que es lo que hacen HashSets detrás de escena). Podrías hacerlo explícitamente, declarando HashMap.

No hay get para HashSets porque normalmente el objeto que proporcionaría al get El método como parámetro es el mismo objeto que obtendría de vuelta.

Puedes añadir valor a nuestra información contribuyendo tu veteranía en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *