Java 对Map进行排序的实现方法

Java 对Map进行排序的实现方法

HashMap与TreeMap的区别

HashMap:

最常用的Map,根据键值可以获取Value值,HashMap通过键值的hash来决定存储的位置,存取速度非常快,同时它的这一性质也决定了它不可能存在键值相同的元素同时存在,后加入的会替换先加入的.使用迭代器输出的顺序是键被添加的顺序,不会进行自动排序

TreeMap:

会对存如的元素按键的大小升序排列,使用迭代器输出的时候是有序的,默认升序.

下面是实现排序的代码

输出结果的方法

迭代器输出Map的元素
public void IteratorPrint(Map map) {
        Set set = map.keySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            int key = iterator.next();
            int value = (int) map.get(key);
            System.out.println(key + ":" + value);
        }
    }
输出List>的方法
public void ListPrint(List<Map.Entry<Integer,Integer>> list) {
        for (int i = 0; i < list.size(); i++) {
            Map.Entry<Integer, Integer> map = list.get(i);
            System.out.println(map.getKey()+":"+map.getValue());
        }
    }

按键的升序的方法(默认的)

Map map1 = new TreeMap<>();
        map1.put(3, 2);
        map1.put(4, 6);
        map1.put(2, 5);
        map1.put(1, 3);
        IteratorPrint(map1);
输出结果
1:3
2:5
3:2
4:6

按键的降序的方法

//实例化时传入`Comparator`
Map<Integer, Integer> map2 = new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {

                return o2 - o1;
            }
        });
        map2.put(3, 2);
        map2.put(4, 6);
        map2.put(2, 5);
        map2.put(1, 3);
        //输出
        IteratorPrint(map2);
输出
4:6
3:2
2:5
1:3

按值的升降排序的方法(升序降序就一行代码的差距)

Map<Integer, Integer> map3 = new TreeMap<>();
        map3.put(3, 2);
        map3.put(4, 6);
        map3.put(2, 5);
        map3.put(1, 3);
        //Map转ArrayList
        List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map3.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                //升序
                return o1.getValue()-o2.getValue();
                //降序
//                return o2.getValue()-o1.getValue();
            }
        });
        //输出
        ListPrint(list);

输出就不贴了,跟上面的一样

主要代码都上了,最后贴一下测试代码,复制可运行

import java.util.*;

/**
 * Created by Brioal on 2016/3/26.
 */
public class TreeMapTest {
    public TreeMapTest() {
        //map按键升序(默认)
        System.out.println("Map按键升序");
        Map<Integer, Integer> map1 = new TreeMap<>();
        map1.put(3, 2);
        map1.put(4, 6);
        map1.put(2, 5);
        map1.put(1, 3);
        IteratorPrint(map1);

        //map按键降序
        System.out.println("Map按键降序");
        Map<Integer, Integer> map2 = new TreeMap<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {

                return o2 - o1;
            }
        });
        map2.put(3, 2);
        map2.put(4, 6);
        map2.put(2, 5);
        map2.put(1, 3);
        IteratorPrint(map2);


        //map按value升降序
        System.out.println("Map按值升降序");
        Map<Integer, Integer> map3 = new TreeMap<>();
        map3.put(3, 2);
        map3.put(4, 6);
        map3.put(2, 5);
        map3.put(1, 3);
        List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map3.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                //升序
                return o1.getValue()-o2.getValue();
                //降序
//                return o2.getValue()-o1.getValue();
            }
        });
        ListPrint(list);
    }

    public void ListPrint(List<Map.Entry<Integer,Integer>> list) {
        for (int i = 0; i < list.size(); i++) {
            Map.Entry<Integer, Integer> map = list.get(i);
            System.out.println(map.getKey()+":"+map.getValue());
        }
    }

    public void IteratorPrint(Map map) {
        Set<Integer> set = map.keySet();
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            int key = iterator.next();
            int value = (int) map.get(key);
            System.out.println(key + ":" + value);
        }
    }

    public static void main(String[] args) {
        new TreeMapTest();
    }
}

你可能感兴趣的:(java,迭代器,hash)