如何从哈希图中找到最高的键值

Posted

技术标签:

【中文标题】如何从哈希图中找到最高的键值【英文标题】:How to find highest key value from hashmap 【发布时间】:2014-08-03 18:09:30 【问题描述】:

使用最大键值进行迭代,以便替换最大字符串值。首先我的代码是

HashMap<String, String> mapp=new HashMap<String, String>();
mapp.put("ab","blue");
mapp.put("abc","black");
mapp.put("abcd","pink");
for (Iterator it = alltyp.iterator(); it.hasNext();) 
    String finalstring = (String) it.next();

    Iterator it1=mapp.entrySet().iterator();
    while(it1.hasNext())
    
        Map.Entry pairs = (Map.Entry) it1.next();
        String key_ = (String) pairs.getKey();
        String value_ = (String) pairs.getValue();
        finalstring = finalstring.replaceAll(key_, value_);      
    

我想用最大键值进行迭代意味着键值“abcd”应该先迭代,然后是“abc”,然后是“ab”。

【问题讨论】:

【参考方案1】:

这是一个使用 Collections.max() 的示例。如果您想要自定义排序,也可以传递比较器。

HashMap<String, String> mapp=new HashMap<String, String>();
mapp.put("ab","blue");
mapp.put("abc","black");
mapp.put("abcd","pink");

// find max key alphabetically
String maxKey = Collections.max(mapp.keySet());


Comparator<String> strLenCmp = new Comparator<String>() 
    @Override
    public int compare(String o1, String o2) 
        return Integer.compare(o1.length(), o2.length());
    
;

// find max key by key length
String longKey = Collections.max(mapp.keySet(), strLenCmp);

编辑:添加带有自定义比较器的示例

【讨论】:

如何通过比较器? 更新了答案,带有 Compator 代码 sn-p。如果您对它感到满意,请接受答案。 感谢您的回答,但比较时出现错误。我想首先迭代更大的键值(按降序排列),以便我的 replaceall 函数首先替换更大的值。请给你的建议。 我给出的例子对我来说可以编译。你得到什么错误?如果您想找到最大的键,则字符串的默认比较器可能是您所需要的。【参考方案2】:

使用泛型,摆脱强制转换。这将大大整理您的代码。

您将需要一个自定义比较器来进行排序。

一旦你有了比较器,你就有两个选择:

选项 1:

创建一个 ArrayList,将 map 中的所有键转储到其中。

排序ArrayList,遍历排序后的ArrayList。

选项 2:

使用 TreeMap 来存储数据。

【讨论】:

是的,为此使用 TreeMap @DavidRoussel TreeMap 的缺点是你被绑定到一个排序顺序。使用选项 1,您可以通过多种方式对相同的数据进行排序,因此值得同时使用这两个选项。 好点蒂姆,我已经发布了一个带有 Collections.max() 示例的答案。【参考方案3】:

尝试使用 TreeMap 而不是 HashMap,它具有获取最后一个条目的方法,这将为您提供具有最高键值的条目。即使在 TreeMap 中,如果您传递您的自定义 Comparator,那么它也会以您将首先获得具有最大值的键的方式进行排序,因此您不必担心它。

TreeMap - lastEntry

参考此链接和 lastEntry 方法。

【讨论】:

您只需使用 keySet() 方法获取键条目列表并对其进行迭代。

以上是关于如何从哈希图中找到最高的键值的主要内容,如果未能解决你的问题,请参考以下文章

从 Perl 中的哈希中获取具有最高值的键的最简单方法是啥?

在 PowerShell 中合并哈希表:如何?

如何返回总和小于最大值的键的哈希对?

如何在 Perl 中找到哈希中的键数?

如何找到 Spark-streaming 中价值最小的键值对?

python 中关于字典的键