objetos objeto metodo lista getclass ejemplo como castear java collections hashmap

metodo - lista de objetos java



¿Cuál es la mejor manera de verificar si un objeto pertenece a otra lista de objetos(por ejemplo, fija)? (7)

¿Cuál es la definición de "es de otra lista"? ¿Es la igualdad del objeto? Entonces, lo que tienes es bueno, pero podrías considerar un Juego (Hash) para una mayor claridad.

Si se trata de igualdad de referencia, debe buscar IdentityHashMap o utilizar un HashSet de IdentityHashcode

Actualmente, creo un HashMap con Id de objeto como clave y 1 como valor. Y el método solicita Object / Id y comprueba si hay una clave coincidente.

¿Eso esta bien? ¿O hay (hay) mejores alternativas?


Como Bruno sugiere, puedes usar un conjunto para tu lista fija de objetos y luego llamar a contains() .

Si usa un HashSet , asegúrese de anular la hashCode() su objeto hashCode() que se usa debajo del cofre para verificar la identidad en este caso.

(La última vez que cavé en el JRE, su enfoque de usar un HashMap fue exactamente lo que hizo un HashSet todos modos).


Como otros han notado, puedes usar un HashSet para eso, o cualquier tipo de Set, en realidad. Si usa sus propios objetos, asegúrese de que anulen hashCode() (requerido para HashSet) y equals() (si anulan ambos, funcionarán con cualquier Set).


Eso es esencialmente lo que HashSet hace, pero yo usaría HashSet en lugar de repetir la implementación.


Está bien. Alternativamente, podría usar un HashSet .

EDITAR:

Puedes comparar objetos de 2 maneras:

  1. Por referencia
  2. Personalizado

La comparación del Object predeterminado se realiza por referencia y se implementa en la clase Object .

Si alguna clase en la jerarquía de su objeto anula esta implementación predeterminada, entonces realiza una comparación personalizada. Si esto sucede, también debe anular el hashcode .

Dado esto, si desea comparar objetos por referencia pero hay una implementación personalizada de igualdad, entonces debe usar IdentityHashMap ELSE y usar un HashSet .

Si desea mantener su implementación actual con HashMap , también está bien. HashSet se implementa internamente con un HashMap. Pero, en lugar de establecer el valor en 1, configúralo con null .

También está la cuestión de la estructura de datos correcta. Puede usar una List lugar de una estructura hash . El tipo de estructura de datos que debe usar depende de usted. Esto depende de muchos factores, como la cantidad de objetos que desea colocar en la colección, cuántos accesos habrá, inserciones, etc.



Depende de lo que quiere decir con "es".

Si se object1 == object2 identidad del objeto (es decir, object1 == object2 ), entonces podría usar IdentityHashMap en la forma que ha descrito.

Si se object1.equals(object2) igualdad de objetos (es decir, object1.equals(object2) ), entonces puede usar un HashSet en lugar de un monkeying con un HashMap.

Si sus objetos utilizan las implementaciones predeterminadas de equals() y hashCode() heredadas de Object, esta es una distinción sin diferencias: los valores predeterminados implementan la igualdad de objetos como identidad de objeto.

Phill Sacre me recordó algo al sugerir List.contains() . No tiene que usar una implementación de Conjunto o Mapa. Puede usar una lista (por ejemplo, ArrayList ). Puede encontrar que tener contiene realizar una búsqueda lineal a través de una lista corta es menos costoso que mantener una estructura hash.