很抱歉,如果这是一个微不足道的问题,但我对java很新,但我已经查看了ArrayLists和Collections。我认为一个集合在某种程度上是我需要去的,但我不熟悉,想在这里问一下。
我查看了comparable接口,但我不确定这是我需要去的地方。我可能会问一个重复的问题,但我已经尝试使用谷歌搜索重载的排序操作符java或用户对象可排序列表等。我可能错过了一个关键的java术语。
我们说我有一个用户定义的类型
class UserObject {
private long timestamp;
private String thing;
private String otherthing;
public UserObject(long ts) { timestamp = ts );
}
是否有一个数据容器可以容纳UserObject并根据私有成员时间戳对它们进行排序?在lua我可以编辑表元方法值,我认为在C ++中你可以重载相等运算符。
我所做的事情:
class UserObject {
...
public boolean lessThan(UserObject rhs) {
return timestamp < rhs.timestamp;
}
}
ArrayList<UserObject> MyObjects;
for( int i = 0; i < 10; i++ ) {
MyObjects.add(new UserObject(10-i))
}
Collections.sort(MyObjects); //should invert the order
答案 0 :(得分:4)
让您的类实现Comparable
接口:
class UserObject implements Comparable<UserObject> {
private long timestamp;
...
// returns int < 0 (this before o), int > 0 (o before this), or 0
public int compareTo(UserObject o) {
return Long.compare(this.timestamp, o.timestamp);
}
}
然后,您可以通过List<UserObject>
对任何s
实施集合Collections.sort(s)
进行排序。
实施Comparable
界面可让您的课程成为一个“自然”的界面。订购。如果您需要任何其他订单,可以编写自定义Comparator
:
public class UserObjectComp implements Comparator<UserObject> {
public int compare(UserObject o1, UserObject o2) {
// return < 0, 0, or > 0
}
}
这可以作为第二个参数传递给sort()
:
List<UserObject> l = new ArrayList<>();
Collections.sort(l, new UserObjectComp());
答案 1 :(得分:0)
是的,有这样一个集合可以为你排序。它被称为TreeSet。您的UserObject类必须实现类似的接口(就像@schwobaseggl用户在他的回答中所示)或者您可以通过传递您自己的Comporator实现来创建您的Set。在以太网情况下,该集将始终保持您的序列排序。请记住,每次修改集合时,它都会执行排序,这可能是性能方面的扩展。因此,您可能希望将收藏集保存在常规列表中,并在需要时使用Collections.sort(s)
方法按需对其进行排序