我想首先迭代最大的键值。我的代码就在这里。我有一些值的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”。 请给我你的建议。
答案 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。