【发布时间】:2015-06-10 13:19:05
【问题描述】:
我想要使用属性“sort_1”排序的对象列表。但是当我想删除时,我希望它使用属性“id”。下面的代码代表了问题。
package javaapplication1;
import java.util.TreeSet;
public class MyObj implements Comparable<MyObj> {
public long sort_1;
public long id;
public MyObj(long sort, long id) {
this.sort_1=sort;
this.id=id;
}
@Override
public int compareTo(MyObj other) {
int ret = Long.compare(sort_1, other.sort_1);
return ret;
}
public String toString() {
return id+":"+sort_1;
}
public static void main(String[] args) {
TreeSet<MyObj> lst=new TreeSet<MyObj>();
MyObj o1 = new MyObj(99,1);
MyObj o2 = new MyObj(11,9);
lst.add(o1);
lst.add(o2);
System.out.println(lst);
MyObj o3 = new MyObj(1234, 1);
//remove myObje with id 1
boolean remove=lst.remove(o3);
System.out.println(lst);
}
}
这段代码的输出是:
[9:11, 1:99]
[9:11, 1:99]
我需要对列表进行排序,因为我在列表中添加了很多内容。我不想明确使用任何“排序”方法。我有什么选择?
编辑:
我的要求是:具有“id”的对象是唯一的,但可以有具有重复“排序”值的对象。
【问题讨论】:
-
您可以使用地图而不是集合。该地图使用
id作为键和MyObj(sort,id)作为值。 -
您是否尝试为将查询 id 字段的 MyObj 指定 equals()?