2015-10-27 5 views
-7

Je suis en train de briser la règle de mettre en permettant le même objet d'être deux fois (juste pour le plaisir)java comment comparer la fonction fonctionne

Ceci est mon code:

class Person implements Comparable<Person> { 
    public String firstName; 

    public Person(String firstName) { 
     this.firstName = firstName; 
    } 

    @Override 
    public int compareTo(Person o) { 
     return 4; 
    } 
} 

class customTreeSet<T extends Person> extends TreeSet<T> { 

    private static final long serialVersionUID = 1L; 

} 

et je l'appelle comme ceci:

Set<Person> set = new customTreeSet<Person>(); 
     set.add(new Person("Forza")); 
     set.add(new Person("Forza")); 
     for (Person person : set) { 
      System.out.println(person.firstName); 
     } 

ce que je suis confronté est que lorsque je quitte le retour comme 4, mon jeu contient deux objets, mais quand je change à zero mon jeu contient un objet.

J'ai besoin de connaître la règle pour le type retournant spécialement qu'il est entier non booléen, s'il était booléen, je dirai que vrai signifie que deux objets sont identiques, faux signifie pas, mais ici c'est une valeur entière pas booléen.

merci pour votre aide

+7

http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T- tl; dr: il renvoie 0 pour les objets égaux. – Marvin

+1

vous devez tricher avec les méthodes equals() et hashCode(). Vous devez également en sortir plus. – NickJ

Répondre

1

L'interface Comparable est utilisé pour comparer deux objets et leur ordre. As per the Javadocs, la méthode compareTo devrait retourner 0 si les deux objets sont égaux, tout nombre négatif si l'objet this est "plus petit" que l'autre spécifié, et tout nombre positif si l'objet this est "plus grand" que l'autre spécifié. Ce que signifie "plus petit" et "plus grand" dépend entièrement de ce que vous essayez de modéliser - pour les chaînes, par exemple, "supérieur à" et "inférieur à" se réfèrent à leur ordre alphabétique, tandis que pour les entiers il fait référence à leur naturel commander. Dans votre cas, en retournant toujours 4, vous prétendez que 1) les objets ne sont pas égaux, et 2) les deux objets sont plus gros que l'autre (ce qui n'a pas vraiment de sens sémantique, mais si ça marche pour vous, peu importe).