如何从hashmap中找到最高键值

时间:2014-06-13 08:33:12

标签: java iterator hashmap

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

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_);      
    }
}

我想迭代最大键值意味着键值&#34; abcd&#34;应该首先迭代然后&#34; abc&#34;然后&#34; ab&#34;。

3 个答案:

答案 0 :(得分:13)

以下是使用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);

编辑:添加了自定义Comparator

的示例

答案 1 :(得分:1)

使用泛型,摆脱施法。这会很多地整理你的代码。

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

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

选项1:

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

对ArrayList进行排序,遍历已排序的ArrayList。

选项2:

使用TreeMap存储数据。

答案 2 :(得分:0)

尝试使用TreeMap而不是HashMap,它具有获取最后一个条目的方法,该条目将为您提供具有最高键值的条目。即使在TreeMap中,如果你传递自定义比较器,那么它将以一种方式排序,你将获得具有最大值的键,所以你不必担心它。

TreeMap - lastEntry

请参阅此链接和lastEntry方法。