2014-07-09 3 views
2

데이터 개체가 많은 프로그램이 있습니다. 이들 각각은 Comparable을 구현하고 중복 값을 포함하여 의 가장 높은 값에서 가장 낮은 값까지 정렬하도록 설정됩니다 (단순한 long 값을 기반으로 함). 나는이 객체들을 세트 /리스트에 저장하여 그 객체를 반복 할 수있게하고 각각의 객체를 각각의 장소에서 꺼내기를 원한다.Java : 중복을 허용하는 정렬 된 목록/집합

그러나 TreeSet을 사용하여 보았습니다.하지만 중복을 허용하지 않으므로 같은 값을 가진 많은 개체 중 하나만 유지합니다. 그런 다음 동일한 값을 가진 요소를 유지할 수있는 TreeMultiset을 발견했습니다. 유일한 문제는 동일한 객체를 여러 개 저장하는 것이 아니라 동일한 객체의 복제본을 저장한다는 것입니다.

내가 원하는 것을 할 수있는 라이브러리/내장 객체가 있습니까? 아니면 직접 구현을 만들어야합니까?

참고 : 개체가 사용자에게 고유 ID 및 시간 값 (이 비교되는 것입니다) 당신이

+0

가능 중복 [자바 : 분리 수거 중복을 허용, 메모리 효율적이고 빠른 삽입 + 업데이트를 제공한다 (http://stackoverflow.com/questions/12827595/ 같은 래퍼 클래스와 동일한 개체 java-sorted-collection-allow-duplicates-is-memory-efficient-and-provide) – bumbumpaw

+0

좋아, 그래서 내 자신의 질문을 해결하는 방법을 알아 냈어. 제공된 중복 서를 부른다. 제 경우에는 Collections.sort()를 사용하여 간단하게 ArrayList를 사용했습니다. 주로 요소를 순서대로 유지했기 때문에 이것을 선택했습니다. ArrayList.subList()를 수행 할 수있게 해 주었기 때문에 내가 언급 한 것을 잊어 버렸습니다. – ZephireNZ

+0

니스! 잘 됐네요. – bumbumpaw

답변

1

상자 수를 포함하고 있기 때문에 이유는 내가 TreeMultiset에서 복제 개체를하지 않으려는 당신의

class MyContainer:IComparable{ 
    public int compareValue; 
    public List<object> data; 

    public int CompareTo(MyContainer other){ 
     return this.compareValue - other.compareValue; 
    } 

    public void AddItem(object item){ 
     data.add(item); 
    } 

    public object GetItem(int Id){...} 
} 

class Program() 
{ 
TreeSet<MyContainer> data; 
public static void main(){ 
    data.AddToContainer("aaa"); 
    data.AddToContainer("aaa"); 
    data.AddToContainer("ccc"); 

} 

public void AddToContainer(object item){ 
    if(data.contains(item)){ 
     data.get(item).AddItem(item); 
    } 
    else{ 
     MyContainer cont = new MyContainer(); 
     cont.AddItem(item); 
     data.add(cont); 
    } 
    } 

} 
관련 문제