J'ai vu d'autres questions au sujet d'obtenir des objets de Jeu est basé sur la valeur de l'indice et je comprends pourquoi ce n'est pas possible. Mais je n'ai pas été en mesure de trouver une bonne explication pour pourquoi un objet n'est pas autorisé donc pensé que je pourrais demander.
HashSet est soutenu par une table de hachage afin d'obtenir un objet à partir, il devrait être assez simple. Comme il est maintenant, il semble que j'aurais pour itérer sur chaque élément de la HashSet et de test pour l'égalité, qui semble inutile.
Je pouvais HashMap mais je n'ai pas besoin d'une clé:valeur paire, j'ai juste besoin d'un Ensemble.
Par Exemple dire que j'ai Foo.java:
package example;
import java.io.Serializable;
public class Foo implements Serializable {
String _id;
String _description;
public Foo(String id){
this._id = id
}
public void setDescription(String description){
this._description = description;
}
public String getDescription(){
return this._description;
}
public boolean equals(Object obj) {
//equals code, checks if id's are equal
}
public int hashCode() {
//hash code calculation
}
}
et Example.java:
package example;
import java.util.HashSet;
public class Example {
public static void main(String[] args){
HashSet<Foo> set = new HashSet<Foo>();
Foo foo1 = new Foo("1");
foo1.setDescription("Number 1");
set.add(foo1);
set.add(new Foo("2"));
//I want to get the object stored in the Set, so I construct a object that is 'equal' to the one I want.
Foo theFoo = set.get(new Foo("1")); //Is there a reason this is not allowed?
System.out.println(theFoo.getDescription); //Should print Number 1
}
}
Est-ce parce que la méthode equals est destiné à tester pour "absolue" de l'égalité plutôt que la "logique" de l'égalité (dans ce cas, contains(Object o) serait suffisante)?