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

TreeMap

丁韬
2023-03-14
问题内容

import java.util.*;

public class Sort {

    static class ValueComparator implements Comparator<String> {

        Map<String, Integer> base;

        ValueComparator(Map<String, Integer> base) {
            this.base = base;
        }

        @Override
        public int compare(String a, String b) {
            if (base.get(a) >= base.get(b)) {
                return 1;
            } else {
                return -1;
            }
        }
    }

    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        ValueComparator vc = new ValueComparator(map);
        TreeMap<String, Integer> sorted = new TreeMap<String, Integer>(vc);
        map.put("A", 1);
        map.put("B", 2);
        sorted.putAll(map);
        for (String key : sorted.keySet()) {
            System.out.println(key + " : " + sorted.get(key)); // why null values here?
        }
        System.out.println(sorted.values()); // But we do have non-null values here!
    }
}

输出:

A : null
B : null
[1, 2]
BUILD SUCCESSFUL (total time: 0 seconds)

我想知道为什么我们在第一条注释行中得到空值,而第二条注释行中却显示出非空值。

编辑:@null的版本似乎不起作用。我将代码更改如下:

        public int compare(String a, String b) {
            if (a.equals(b)) return 0;
            if (base.get(a) >= base.get(b)) {
                return 1;
            } else return -1;
        }

似乎可行,但我不确定。


问题答案:

我的猜测是您的ValueComparator.compare()方法永远不会返回0(表示相等),从而导致该Map.get()方法找不到匹配项。



 类似资料:
  • 问题内容: 似乎它们都可以让您检索最小值(这是我的Prim算法所需的),并迫使我删除并重新插入密钥以更新其值。不仅对于本示例,而且一般来说,使用一个相对于另一个有任何优势吗? 问题答案: 一般来说,使用堆仅跟踪最小元素的工作量较小。 一棵树更有组织性,并且需要更多计算才能维护该组织。但是,如果您需要访问 任何 键,而不仅仅是最小键,那么堆就不够了,并且树的额外开销是合理的。

  • 问题内容: 我正在将Java代码库迁移到纯Scala,并且只能使用这一段代码。我有一个IntervalMap的实现,即一个数据结构,可让您有效地将范围映射到,和操作全部所在的位置(与IntervalTree或SegmentTree略有不同)。 这段代码使用Java,并且在迁移到Scala时遇到了两个大问题: Scala没有-我决定使用(奇怪的Scala有但没有)存储密钥并将值存储在辅助中来解决它。

  • 问题内容: 我想遍历,对于所有具有特定值的键,我希望将它们添加到new 。我怎样才能做到这一点? 问题答案: 假设类型TreeMap : (键和值类型当然可以是任何类)

  • 问题内容: 我有一个对象列表,我需要根据其字段之一的属性对其进行排序。我听说SortedMap和Comparators是执行此操作的最佳方法。 我要对正在排序的类实施Comparable,还是创建一个新类? 如何实例化SortedMap并传递比较器? 排序如何进行?当插入新对象时,它会自动对所有内容进行排序吗? 编辑: 这段代码给我一个错误: (Ktr工具)。Eclipse表示期望类似,因此我提供

  • 问题内容: 我需要对元素进行排序,但不会删除重复项。 我已经去了,因为实际上将值添加到支持的: 然后TreeMap使用 逻辑删除重复项 我写了一个在元素相等的情况下返回1而不是0的a 。因此,在元素相等的情况下,带有此元素将不会覆盖重复项,而只会对其进行排序。 我已经为简单对象测试过,但是我需要一组自定义对象。 这种方法是好的还是有更好的方法来实现呢? 编辑 实际上,我有以下类的ArrayList

  • 问题内容: 我有以下对象: 我在以下使用它: 现在,树形图用于一个称为的类中,用于存储图形中当前存在的节点以及它们的边集(来自class )。我的问题是当我尝试执行时: 我有时会得到以下信息: 哈希码:true等于:true包含: false N:foo X:foo比较数:0 有人知道我在做什么错吗?我对这一切仍然是陌生的,所以如果我忽略了一些简单的事情,我会事先道歉(我知道这并不重要,但我想我会