gpt4 book ai didi

java - 类对象定义排序行为

转载 作者:行者123 更新时间:2023-12-01 18:06:05 24 4
gpt4 key购买 nike

抱歉,如果这是一个微不足道的问题,但我对 java 还很陌生,但我已经研究过 ArrayLists 和 Collections。我认为 Collection 是我需要的方式,但我不熟悉,想在这里问。

我调查了comparable接口(interface),但我不确定这是否是我需要去的地方。我可能问了一个重复的问题,但我尝试过谷歌搜索重载排序运算符java,或用户对象可排序列表等。我可能缺少一个关键的java术语。

假设我有一个用户定义的类型

class UserObject {
private long timestamp;
private String thing;
private String otherthing;
public UserObject(long ts) { timestamp = ts );
}

是否有一个数据容器可以容纳 UserObjects 并根据私有(private)成员时间戳对它们进行排序?在 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

最佳答案

让你的类(class)实现Comparable接口(interface):

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接口(interface)给你的类一个“自然”的顺序。如果需要其他订单可以自定义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());

关于java - 类对象定义排序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36314861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com