[关闭]
@Cesar 2015-12-18T09:30:30.000000Z 字数 2393 阅读 1428

Java中Map的排序

Java 学习

目录

  1. Map的种类
  2. 按键排序(sort by key)
  3. 按值排序(sort by value)

Map的种类

在Java中,Map的主要作用是存储键值对。由于是根据键得到值,所以不允许键重复。它主要有如下几个类别:


按键排序

  1. private static void sort_by_key(){
  2. Map<Integer, Integer> treeMap = new TreeMap<>(new Comparator<Integer>() {
  3. @Override
  4. public int compare(Integer o1, Integer o2) {
  5. return o2-o1; //倒序.这里说明一下,如果返回负值,则o1先输出,反之则o2
  6. }
  7. });
  8. //填充数据
  9. for(int i = 0; i < 100;i++){
  10. int key = (int)(10000*Math.random());
  11. int value = (int)(10000*Math.random());
  12. treeMap.put(key, value);
  13. }
  14. outMap(treeMap);
  15. }

其中outMap是遍历Map的数据从而将其全部输出,代码如下:

  1. public static void outMap(Map<Integer, Integer> map){
  2. for(Integer integer:map.keySet()){
  3. System.out.println("key="+integer+" value="+map.get(integer));
  4. }
  5. }

结果如下:

key=9977 value=80
key=9684 value=7108
key=9422 value=1706
key=9264 value=1210
key=9248 value=4758
key=9024 value=7048
key=8892 value=3124
key=8879 value=6414
key=8814 value=8171
key=8728 value=1538
key=8513 value=4956
key=8462 value=5617
key=8355 value=8912
...

从上面可以看出,按键排序是不难的,而安置排序就比较麻烦一些,需要将Map转一下。


按值排序

由于Java中Map并没有此功能,所以我们需要自己实现。思路如下:

代码实现如下:

  1. private static Map<Integer, Integer> sortMap(Map<Integer, Integer> linkedMap) {
  2. List<Map.Entry<Integer, Integer>> cache = new ArrayList<>(linkedMap.entrySet());
  3. //重写比较函数
  4. Collections.sort(cache,new Comparator<Map.Entry<Integer, Integer>>() {
  5. @Override
  6. public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
  7. //若返回值小于0,则o1在o2前面
  8. return o2.getValue()-o1.getValue();
  9. }
  10. });
  11. Map<Integer, Integer> resultMap = new LinkedHashMap<>();
  12. //将结果插入LinkedMap然后返回
  13. for(int i = 0; i < cache.size();i++){
  14. resultMap.put(cache.get(i).getKey(), cache.get(i).getValue());
  15. }
  16. return resultMap;
  17. }

结果:

7965 9966
1067 9963
1720 9833
3257 9738
3934 9578
777 9348
1924 9315
3472 9270
3649 9114
5892 9078

这样,按值排序和按键排序就都可以实现了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注