【Java】Java的HashMap按key排序和按value排序的实现

Java的HashMap按key排序和按value排序的实现

  • 1.按key排序
    • 方式一:将哈希表的键(得到HashMap中键的集合(keySet))转化为数组,使用Arrays.sort()进行排序
    • 方式二:将entrySet转换为List,然后重写比较器,使用Collections.sort()进行排序
  • 2.按value排序
    • 方式一:将entrySet转换为List,然后重写比较器

前言

  1. HashMap的储存是没有顺序的,而是按照key的HashCode实现。
  2. 直接输出HashMap得到的是一个无序Map。

1.按key排序

方式一:将哈希表的键(得到HashMap中键的集合(keySet))转化为数组,使用Arrays.sort()进行排序

public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("ddd",1);
        map.put("aaa",3);
        map.put("bbb",4);
        map.put("ccc",2);

        // 按key排序
        // 获取哈希表的键
        Set set=map.keySet();
        // 将哈希表的键,转化为对象数组
        Object []arr= set.toArray();
        // 此时可以使用sort进行排序
        Arrays.sort(arr);
        // 通过map.get(key)得到键对应的值
        for (Object key:arr){
            System.out.println(key+","+map.get(key));
        }
    }

方式二:将entrySet转换为List,然后重写比较器,使用Collections.sort()进行排序

 public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("ddd",1);
        map.put("aaa",3);
        map.put("bbb",4);
        map.put("ccc",2);

        // 将map的entrySet放入list集合中
        List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());

        // 对哈希表的键进行排序
        // 对list进行排序,并通过Comparator传入自定义的排序规则
        // 因为键为String类型,所以使用compareTo函数
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getKey().compareTo(o2.getKey());
            }
        });

        // 使用for循环对list中键值对元素进行遍历
        for (int i=0;i<list.size();i++){
            Map.Entry<String,Integer> mmap=list.get(i);
            System.out.println(mmap.getKey()+","+mmap.getValue());
        }
    }

结果:
aaa,3
bbb,4
ccc,2
ddd,1

2.按value排序

方式一:将entrySet转换为List,然后重写比较器

 public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("ddd",1);
        map.put("aaa",3);
        map.put("bbb",4);
        map.put("ccc",2);

        // 将map的entrySet放入list集合中
        List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());
        
        // 对哈希表的值进行排序
        // 对list进行排序,并通过Comparator传入自定义的排序规则
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o1.getValue()-o2.getValue();
            }
        });

        // 用迭代器对list中的键值对元素进行遍历
        Iterator<Map.Entry<String,Integer>> iterator=list.iterator();
        while(iterator.hasNext()){
            Map.Entry<String,Integer> ite= iterator.next();
            System.out.println(ite.getKey()+","+ite.getValue());
        }
    }

结果:
ddd,1
ccc,2
aaa,3
bbb,4

你可能感兴趣的:(Java,java,算法,数据结构,HashMap)