2011-09-05 14 views
6

Java define una interfaz Set donde contains() se define de la siguiente manera:Instancia establecida en Java?

devoluciones true si este conjunto contiene el elemento especificado. Más formalmente, devuelve verdadero si y solo si este conjunto contiene un elemento e tal que (o==null ? e==null : o.equals(e)).

La interfaz Collection define contains() como siguiente:

devoluciones true si esta colección contiene el elemento especificado. Más formalmente, devuelve verdadero si y solo si esta colección contiene en menos un elemento e tal que (o==null ? e==null : o.equals(e)).

Necesito un Java conjunto instancia ", donde se basa en == y no equals(). En otras palabras, un conjunto de instancias duras donde dos objetos diferentes A y B donde A.equals(B) podrían coexistir en este mismo conjunto, desde A!=B.

¿Se proporciona un 'conjunto de instancias' en Java o en alguna biblioteca pública? No puedo encontrar nada, pero puede ser que alguien lo sepa mejor en SO. Si no, lo implementaré. Gracias.

Respuesta

13

No hay un "conjunto de instancias" directo en el JRE.

Pero existe un IdentityHashMap, que implementa un "mapa de instancia" de acuerdo con su terminología.

Y hay un método llamado Collections.newSetFromMap() que puede crear un Set de un Map aplicación arbitraria.

para que pueda construir fácilmente su propia instancia establecido así:

Set<MyType> instanceSet = Collections.newSetFromMap(new IdentityHashMap<MyType,Boolean>()); 
+0

+1: más rápido que yo. ;) –

+0

Parece que esta es la base que necesito para mi conjunto de instancias. Estupendo. Gracias. – JVerstry

+1

El OP debe tener en cuenta que un 'Conjunto' implementado de esta manera es una violación del contrato 'Establecer' ... tanto como 'IdentityHashMap' viola el contrato' Mapa '. De todos modos, esa es la razón probable por la que dicha clase no es una parte estándar del marco de colecciones. –

1

Se podía poner en práctica el método equals así:

public boolean equals(Obect o) { 
    return this == o; 
} 
+0

Cierto, podría, pero me gustaría tener la oportunidad de implementar equals() de manera diferente. – JVerstry

+1

Ok :-) Solo un vistazo rápido, diría que casi * todas * colecciones comprueban la igualdad de referencia antes de intentar llamar a 'iguales'. – dacwe

Cuestiones relacionadas