基于键对hashmap进行排序

use*_*697 75 java hashmap

我在java中有以下hashmap:

{B046 = 0.0,A061 = 3.0,A071 = 0.0,B085 = 0.0,B075 = 3.0,B076 = 9.0,B086 = 3.0,B095 = 0.0,B096 = 0.0,A052 = 0.0,B066 = 0.0,B056 = 9.0,B065 = 0.0,B055 = 9.0}

我应该如何对hashmap进行排序,以便将Alphabet和数字数字考虑在内?

生成的hashmap应如下所示:

{A052 = 0.0,A061 = 3.0,A071 = 0.0,B046 = 0.0,B055 = 9.0,B056 = 9.0,B065 = 0.0,B066 = 0.0,B075 = 3.0,B076 = 9.0,B085 = 0.0,B086 = 3.0,B095 = 0.0,B096 = 0.0}

感谢帮助!

Tom*_*icz 228

使用排序TreeMap:

Map<String, Float> map = new TreeMap<>(yourMap);
Run Code Online (Sandbox Code Playgroud)

它会自动按键排序.我认为String在你的情况下自然订购会很好.

请注意,HashMap由于查找优化不会保留顺序.


Kal*_*Kal 25

将TreeMap与自定义比较器一起使用.

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
Run Code Online (Sandbox Code Playgroud)

当您添加新元素时,它们将自动排序.

在您的情况下,甚至可能不需要实现比较器,因为字符串排序可能就足够了.但是,如果要实现特殊情况,例如小写字母在大写之前出现,或者以某种方式处理数字,请使用比较器.


Ros*_*nal 11

TreeMap这是你最好的选择(自然).TreeMap根据钥匙自然排序.

HashMap不保留插入顺序也不对地图进行排序.LinkedHashMap保持插入顺序,但不会自动对地图进行排序.仅TreeMapMap界面中按照自然顺序对数据进行排序(数字首先,大写字母第二,小写字母最后).


San*_*eth 6

使用TreeMap(构造函数):

Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Run Code Online (Sandbox Code Playgroud)

使用TreeMap(PutAll方法):

Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);
Run Code Online (Sandbox Code Playgroud)

Map接口的实现:

  1. TreeMap - 插入时自动按升序对键进行排序。
  2. HashMap - 插入顺序不会被维护。
  3. LinkedHashMap - 将保持插入顺序。


Dav*_*ton 5

使用TreeMap,虽然地图"看起来像那样"有点模糊 - 你也可以根据你的标准对键进行排序,并迭代地图,检索每个对象.