【问题标题】: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”。

【问题讨论】:

    标签: java iterator hashmap


    【解决方案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() 方法获取键条目列表并对其进行迭代。
    猜你喜欢
    • 2014-03-07
    • 2011-08-27
    • 1970-01-01
    • 2017-06-20
    • 2012-10-11
    • 2013-12-24
    • 2014-02-23
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多