我有一个包含大量数据对象的程序。其中每个都实现了Comparable,并设置为从最高到最低(基于一个简单的长值)包括重复值。我希望这些对象存储在一个集合/列表中,以便我可以迭代它,并在各自的位置拉出每个对象。
我已经看过使用TreeSet,但是这不允许重复,因此只保留多个具有相同值的对象中的一个。然后我找到了TreeMultiset,它可以保持元素具有相同的值。唯一的问题是它只是存储同一个对象的重复项,而不是多个相同的对象。
是否有我可以使用的库/内置对象可以做我想要的,或者我应该自己创建一个实现?
注意:我不希望TreeMultiset中的对象重复的原因是因为该对象包含用户的唯一ID和时间值(这是比较的)
答案 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);
}
}
}