如何从哈希图中找到最高的键值
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 中的哈希中获取具有最高值的键的最简单方法是啥?