代码之家  ›  专栏  ›  技术社区  ›  Joel Alvarez Myrrie

TreeMap,如何获取Key以获取其信息

  •  0
  • Joel Alvarez Myrrie  · 技术社区  · 8 年前

    我想知道,如何在TreeMap中获取密钥,以获取该密钥的信息?例如,我声明了一个TreeMap,如下所示:

    TreeMap miniDictionary = new TreeMap<DictionaryTerm,Integer>(new TermComparator());
    

    DictionaryTerm只是一个简单的类,它只有两个变量,“Stringterm”和“intnumber”。

    TermComparator是一个比较两个键的类:

    class TermComparator implements Comparator<DictionaryTerm> {
    
    @Override
    public int compare(DictionaryTerm e1, DictionaryTerm e2) {
        return e1.getTerm().compareTo(e2.getTerm());
    }
    

    }

    假设TreeMap已经有这样一个条目:(“LedZeppelin”,55)-->25 其中(LedZeppelin,55)是键,25是值。

    现在假设我有这个变量:

    DictionaryTerm  aTerm = new DictionaryTerm("LedZeppelin",100);
    

    我如何在TreeMap中找到“aTerm”并获取其密钥以读取其信息?考虑到我创建的TermComparator,使用String术语进行比较。

    事先谢谢。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Mifeet Alexander    8 年前

    我想你有兴趣从 TreeMap 相当于 aTerm ,因为获得价值很容易( miniDictionary.get(aTerm) ).

    要获取密钥,可以使用 floorKey() 。此方法返回“小于或等于给定键的最大键,如果没有该键,则返回null”,因此必须首先检查null和equality:

        TermComparator termComparator = new TermComparator();
        TreeMap<DictionaryTerm, Integer> miniDictionary = new TreeMap<>(termComparator);
        miniDictionary.put(new DictionaryTerm("LedZeppelin", 55), 25);
    
        DictionaryTerm  aTerm = new DictionaryTerm("LedZeppelin",100);
        DictionaryTerm floorKey = miniDictionary.floorKey(aTerm);
        if (floorKey != null && termComparator.compare(aTerm, floorKey) == 0) {
            System.out.println(floorKey.getNumber()); // prints 55
        }
    

    如果要同时获取键和值,请使用 floorEntry() .