2013-10-30 2 views
0

사용Java에서 중복 된 데이터를 정렬하고 제거하는 데 가장 적합한 데이터 셋은 무엇입니까?

TreeSet의

, 그것은 때문에 이진 검색 방법의 중복을 제거 보장을 제공하지 않는 경우.

사용 HashSet의

, 그것은 더 정렬을 제공하지 않는 경우.

두 기능을 모두 데이터 세트에 포함 시키길 원합니다. 같은 일을하는 데 바람직한 방법은 무엇입니까?

HashSet &을 사용하여 중복을 먼저 제거한 다음이를 정렬하기 위해 TreeSet으로 복사 할 수 있습니까?

+0

당신의 해시 세트에 대한 비교기를 작성하십시오, what prob ?? –

+3

'compareTo()'가'equals()'와 일치하면'TreeSet'가 잘 동작해야합니다. – kiheru

+0

@kiheru : 작동하지 않습니다. TreeSet의 equals() 메소드는 런타임에 사용되지 않으므로. – Sarang

답변

2

사용 TreeSetcompareTo() 되돌아가 대체 될 이상의 요소를 0, 따라서, 단지 고유의 요소가 존재한다면 .. 여기서

TreeSet<Object1> tree=new TreeSet<Object1>(new Comparator<Object1>() { 
     @Override 
     public int compare(Object1 o1, Object1 o2) { 
      return o1.k-o2.k; 
     } 
    }); 

Object1 아래와 같다 :

class Object1{ 
    int k; 
} 

Object1의 두 객체가 동일하면 compare() 메서드보다 int k 메서드가 0을 반환하고 TreeSet이 duplicat를 감지합니다. 이자형. 나는 분명하다.

+0

TreeSet은 각 객체를 비교하지 않기 때문에 많은 객체에서 작동하지 않습니다. – Sarang

+2

@Sarang 그러면 깨진 compareTo가 사용됩니다. 이것은 깨진 hashCode가 작동하지 않는 HashSet과 동일합니다 *. – user2864740

+0

@Sarang 나는 당신의 요점을 이해하지 못합니다. – Trying