如何在hashmap中首先迭代最大的键字符串值

时间:2014-06-23 05:07:13

标签: java loops hashmap

我想首先迭代最大的键值。我的代码就在这里。我有一些值的hashmap。我想首先迭代最大的键值,以便它将根据我的代码首先替换最大的键值。

 HashMap<String, String> mapp=new HashMap<String, String>();
          mapp.put("ab","blue");
          mapp.put("abc","black");
          mapp.put("abcdef","green");
          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_);
         }
     }

首先它将迭代键值“abcdef”然后“abcd”然后“abc”和最终“ab”。现在在while循环中它将首先替换“abcdef”。     请给我你的建议。

2 个答案:

答案 0 :(得分:1)

使用TreeMap对象代替HashMap

TreeMap进行迭代将按升序为您提供密钥。只需在迭代时按下堆栈中的值,然后逐个弹出它们,然后瞧,您现在按降序排列键。

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

Stack<Entry<String, String>> stk = new Stack<Entry<String, String>>();
for (Entry<String, String> entry : mapp.entrySet()) {
    stk.push(entry);
}

while (!stk.isEmpty()) {
    Entry<String, String> entry = stk.pop();
    // Do something with entry
}

答案 1 :(得分:0)

可以直接通过TreeMap完成;你只需要传递你自己的比较器,它按长度按降序对键进行排序。

    Map<String,String> mapp = new TreeMap<String,String>(new Comparator<String>(){
        @Override
        public int compare(String paramT1, String paramT2) {
            Integer t1 = paramT1.length();
            Integer t2 = paramT2.length();
            return t2.compareTo(t1);
        }

    });
     mapp.put("ab","blue");
     mapp.put("abc","black");
     mapp.put("abcdef","green");
     mapp.put("abcd","pink");

     for(String t : mapp.keySet()){
         System.out.println(" key :"+ t);
     }

我在博客上详细讨论了比较器; here