有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在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) 个答案

  1. # 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
    }
    
  2. # 2 楼答案

    可以直接通过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