2014-09-01 8 views
0

나는Java- 명확화의 TreeSet?

내가 read했습니다 (자바에 새로운) 혼란 스러워요 그 :

TreeSet의 실제로 전혀 등호()를 사용하지 않습니다. compareTo()를 대신 사용합니다. compareTo()가 0을 반환하면 두 개의 객체가 이고 TreeSet과 관련이 있다는 것을 의미합니다.

우수.

그래서 내가 가진 :

public class User implements Comparable<User> 
{ 
    String Username; 
    String Password; 


    @Override 
    public int compareTo(User o) 
    { 
     return o.Username.compareTo(this.Username); 
    } 
} 

나는 또한이 :

public static void main(String[] args) 
    { 
     TreeSet<User> ts = new TreeSet<User>(); 
     User u = new User(); 
     u.Username="u"; 
     ts.add(u); 

     User u1 = new User(); 
     u1.Username="u"; 
     ts.add(u1); //<--------------- 
     System.out.print(u1.compareTo(u)); //0 


    } 

디버그에서 상대 : compareTo - 반환 "0". 내가 두 요소를 "같은 주문"삽입 할 때

는 왜 예외가없는

질문 : 그렇다면

(그들은 같은 순서가)?

+0

'ts'의 길이는 1입니다. BTW :'Implementing comparable '을 상속 받고 싶지 않다면, 다른 생성자를 사용할 수 있습니다 :'new TreeSet (new comparable )'. –

+0

@PeterRader 더 좋아해. 당신이 상속받을 수 없다면 ....-) –

+0

왜 예외가 생길까요? 대신'add'는 문서화 된대로 false를 반환합니다. –

답변

4

add() 방법의 문서는 TreeSet에 있습니다.

이 집합에 이미 요소가 포함되어 있으면 호출은 집합을 변경하지 않고 false를 반환합니다.

넌 번째 요소 ( U1)하지 실제로TreeSet에 첨가.

1

두 개의 동일한 요소를 Set에 추가해도 예외는 아닙니다. 두 번째 테스트는 compareToequals과 일치하지 않는 경우 무슨 일을보고 열심히하게 false

boolean addU1 = ts.add(u1); // returns false 

주를 반환하는 동안 compareTo 방법에 의존하기 때문에 첫 번째 추가, true

boolean addU = ts.add(u); // returns true 

을 반환 java.lang.String이고, 이는 equals과 일치합니다.

+0

[chat] (http://chat.stackoverflow.com/rooms/60411/room-for-royi-namir-and-dasblinkenlight)로 이동하십시오. –