基于键排序哈希图



我在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应该是这样的:

{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}

感谢你的帮助!

使用已排序的TreeMap:

Map<String, Float> map = new TreeMap<>(yourMap);

它将自动按键排序条目。我想对你的情况,自然String订购就可以了。

注意,HashMap由于查找优化不保持顺序。

使用带有自定义比较器的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());

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

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

TreeMap是这类排序(自然)的最佳选择。TreeMap自然根据键进行排序。

HashMap不保留插入顺序,也不对映射进行排序。LinkedHashMap保持插入顺序,但不自动排序映射。只有Map接口中的TreeMap按照自然顺序(数字优先,大写字母其次,小写字母最后)对映射进行排序。

使用TreeMap,尽管让一个"看起来像那样"的映射有点模糊——您也可以根据您的标准对键进行排序,并遍历映射,检索每个对象。

使用TreeMap(构造函数):

Map<String, Float> sortedMap = new TreeMap<>(yourMap);

使用TreeMap (PutAll方法):

Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);

Map接口的实现:

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

使用TreeMap。它实现了SortedMap接口,因此自动对它包含的键进行排序。您只需按字母顺序对键进行排序即可获得所需的结果,因此您甚至不需要提供比较器。

hashmap从不排序。使用HashMap可以做的唯一一件事就是获取所有的键,并将它们存储在一个已排序的集合中,或者存储在一个List中,并对List进行排序。

使用TreeMap可以对地图进行排序。

Map<String, String> map = new HashMap<String, String>();        
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}

您可以使用TreeMap,它将以排序形式存储值。

Map <String, String> map = new TreeMap <String, String>();

TreeMap将自动按升序排序。如果要按降序排序,请使用以下代码:

将下面的代码复制到你的类和main execute方法之外:

static class DescOrder implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {      
        return o2.compareTo(o1);
    }
    }

那么在你的逻辑中:

TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");

最新更新