当前位置: 首页 > 面试题库 >

Java:SortedMap,TreeMap,可比吗?如何使用?

朱越
2023-03-14
问题内容

我有一个对象列表,我需要根据其字段之一的属性对其进行排序。我听说SortedMap和Comparators是执行此操作的最佳方法。

  1. 我要对正在排序的类实施Comparable,还是创建一个新类?
  2. 如何实例化SortedMap并传递比较器?
  3. 排序如何进行?当插入新对象时,它会自动对所有内容进行排序吗?

编辑: 这段代码给我一个错误:

private TreeMap<Ktr> collection = new TreeMap<Ktr>();

(Ktr工具Comparator<Ktr>)。Eclipse表示期望类似TreeMap<K, V>,因此我提供的参数数量不正确。


问题答案:
  1. 比较简单的方法是Comparable使用现有对象来实现,尽管您可以创建一个Comparator并将其传递给SortedMap
    注意ComparableComparator是两个不同的事物;一个实现的类与另一个对象Comparable进行比较this,而一个实现的类则Comparator
    其他 两个对象进行比较。

  2. 如果实现Comparable,则不需要将任何特殊的东西传递给构造函数。只需致电new TreeMap<MyObject>()。( 编辑: 当然Maps需要两个通用参数,但不是一个。愚蠢的我!)
    如果您创建另一个实现的类Comparator,则将该类的实例传递给构造函数。

  3. 是的,根据TreeMapJavadocs的说法。

编辑:
在重新阅读问题时,这都没有道理。如果您已经有了列表,则明智的做法是实施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(用于自然排序),如果需要替代字段比较