Java:排序列表/集,允许重复

时间:2014-07-09 03:45:20

标签: java sorting

我有一个包含大量数据对象的程序。其中每个都实现了Comparable,并设置为从最高到最低(基于一个简单的长值)包括重复值。我希望这些对象存储在一个集合/列表中,以便我可以迭代它,并在各自的位置拉出每个对象。

我已经看过使用TreeSet,但是这不允许重复,因此只保留多个具有相同值的对象中的一个。然后我找到了TreeMultiset,它可以保持元素具有相同的值。唯一的问题是它只是存储同一个对象的重复项,而不是多个相同的对象。

是否有我可以使用的库/内置对象可以做我想要的,或者我应该自己创建一个实现?

注意:我不希望TreeMultiset中的对象重复的原因是因为该对象包含用户的唯一ID和时间值(这是比较的)

1 个答案:

答案 0 :(得分:1)

您可以使用包装类(例如:

)将相同的对象装箱
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);
    }
  }

}