我有一个对象列表,我需要根据其字段之一的属性对其进行排序。我听说SortedMap和Comparators是执行此操作的最佳方法。
编辑: 这段代码给我一个错误:
private TreeMap<Ktr> collection = new TreeMap<Ktr>();
(Ktr工具Comparator<Ktr>
)。Eclipse表示期望类似TreeMap<K, V>
,因此我提供的参数数量不正确。
比较简单的方法是Comparable
使用现有对象来实现,尽管您可以创建一个Comparator
并将其传递给SortedMap
。
注意Comparable
和Comparator
是两个不同的事物;一个实现的类与另一个对象Comparable
进行比较this
,而一个实现的类则Comparator
与
其他 两个对象进行比较。
如果实现Comparable
,则不需要将任何特殊的东西传递给构造函数。只需致电new TreeMap<MyObject>()
。( 编辑: 当然Maps
需要两个通用参数,但不是一个。愚蠢的我!)
如果您创建另一个实现的类Comparator
,则将该类的实例传递给构造函数。
是的,根据TreeMap
Javadocs的说法。
编辑:
在重新阅读问题时,这都没有道理。如果您已经有了列表,则明智的做法是实施Comparable
并调用Collections.sort
它。无需地图。
一些代码:
public class MyObject implements Comparable<MyObject> {
// ... your existing code here ...
@Override
public int compareTo(MyObject other) {
// do smart things here
}
}
// Elsewhere:
List<MyObject> list = ...;
Collections.sort(list);
与一样SortedMap
,您可以创建一个Comparator<MyObject>
并将其传递给Collections.sort(List, Comparator)
。
问题内容: 我正在使用Java JungI图形包和Netbeans7。我从Java中收到以下错误: 这是与错误相关的代码: MyVertex类是我为图形设计的类。以下是MyVertex的代码 如何将MyVertex类型转换为可比对象? 为什么这是必要的?(我没有立即看到原因) 问题答案: 如何将MyVertex类型转换为可比对象? 实现可比接口。 或者,您可以将传递给的构造函数。 为什么这是必要的
问题内容: 我需要一个TreeMap的比较器。我应该在TreeMap的构造函数中匿名编写此代码吗?我还能怎么写我的比较器。目前,Java不喜欢我的代码(我可以匿名这样做吗?): 我可以匿名进行上述操作吗? 我还能怎么做? 我想按值而不是键对myMap进行排序 问题答案: 您无法根据值对TreeMap进行排序。 基于红黑树的NavigableMap实现。映射是根据其键的自然顺序或在映射创建时提供的C
问题内容: 我想遍历,对于所有具有特定值的键,我希望将它们添加到new 。我怎样才能做到这一点? 问题答案: 假设类型TreeMap : (键和值类型当然可以是任何类)
FundingRank和SourceBucket是枚举,但本质上是int 因此,我试图对treemap >进行排序,排序顺序定义为MinFunding rank和max scorrebucket(阈值为5,如果bucket有5个孩子,这意味着如果有其他更小的bucket有更多的孩子,得分更高的bucket获胜,或者如果有更大的fundinggrank有更高的bucket大小和更多的孩子,仍然是更低
本文向大家介绍如何决定使用 HashMap 还是 TreeMap?相关面试题,主要包含被问及如何决定使用 HashMap 还是 TreeMap?时的应答技巧和注意事项,需要的朋友参考一下 对于在 Map 中插入、删除、定位一个元素这类操作,HashMap 是最好的选择,因为相对而言 HashMap 的插入会更快,但如果你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。
问题内容: 我有一个需要在字段上排序的对象列表,例如“分数”。我不加思索地编写了一个实现Comparator的新类,该类可以完成任务并且可以工作。 现在回头看一下,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。分数是订购对象的唯一字段。 我做的可接受的做法是什么? 正确的方法是“首先让类实现Comparable(用于自然排序),如果需要替代字段比较