gpt4 book ai didi

java - 我无法遍历 TreeSet

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:57 24 4
gpt4 key购买 nike

我必须将由他的 id 标识的用户添加到集合中,并且在运行时,该集合的所有用户表单都必须按此 id 排序。

我创建了 TreeSet 添加了一些 User 对象并尝试遍历它。

这是我的尝试:

//irrelevant code removed

TreeSet<User> userSet = new TreeSet<User>();
userSet.add(new User(2));
userSet.add(new User(1));
userSet.add(new User(3));

Iterator<User> iterator = userSet.iterator();

while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}

我编写了 User 类,其中字段 id 之一和构造函数将 id 作为参数。

public class User {
private int id;

// irrelevant code removed

public User(int id) {
this.id = id;
}

// irrelevant code removed

public String toString() {
return id + "";
}
}

当我运行这段代码时,我得到 ClassCastException。

这是堆栈跟踪:

Exception in thread "main" java.lang.ClassCastException: OrderedUsers$User cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at java.util.TreeSet.add(TreeSet.java:255)
at OrderedUsers.<init>(OrderedUsers.java:9)
at Main.main(Main.java:6)

我做错了什么?

最佳答案

当您决定使用 TreeSet 时,您的选择是正确的,因为使用 TreeSet 您可以获得有序的输出。但...请注意,如果您使用 TreeSet,由于 TreeSet 已排序,您必须实现 Comparable .

当您实现 Comparable 时,您将获得预期的结果。

我建议您执行如下更改:

public class User implements Comparable<User> {
private int id;

// irrelevant code removed

public User(int id) {
this.id = id;
}

// irrelevant code removed

public String toString() {
return id + "";
}

@Override
public int compareTo(User u) {
return id - u.id;
}
}

关于java - 我无法遍历 TreeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22107771/

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