首页 >Java >Java基础 > 正文

java中的map可以根据key排序吗

原创2020-01-14 13:32:5101244

java中map常用排序方式:按键排序(sort by key), 按值排序(sort by value)。推荐:java视频教程

1、按键排序

jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator) 传入我们自定义的比较器即可实现按键排序。

默认升序排序方法:

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
 
public class TEST {
 
    public static void main(String[] args) {
        TEST t = new TEST();
        t.sort();
    }
     
    public void sort(){
        Map<String, String> treeMap = new TreeMap<String, String>();
        treeMap.put("c", "ccccc"); 
        treeMap.put("a", "aaaaa"); 
        treeMap.put("b", "bbbbb"); 
        treeMap.put("d", "ddddd"); 
        Set<String> s = treeMap.keySet();
        for (String key : s) { 
            System.out.println(key+" : "+treeMap.get(key)); 
        } 
    }
}

输出结果:

a : aaaaa
b : bbbbb
c : ccccc
d : ddddd

2、按值排序

按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。

Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c)

来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

实现代码

public class MapSortDemo {

    public static void main(String[] args) {

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

        map.put("KFC", "kfc");
        map.put("WNBA", "wnba");
        map.put("NBA", "nba");
        map.put("CBA", "cba");

        Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序
//        Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序

        for (Map.Entry<String, String> entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
    
    /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map<String, String> sortedMap = new LinkedHashMap<String, String>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(
                oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator<Map.Entry<String, String>> iter = entryList.iterator();
        Map.Entry<String, String> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
}

更多java知识请关注PHP中文网java基础教程栏目。

以上就是java中的map可以根据key排序吗的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码
  • 相关标签:java map
  • 本文原创发布php中文网,转载请注明出处,感谢您的尊重!
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • javamapkeyMap是键值对集合接口,它实现类主要包括:HashMap,TreeMap,Hashtable及LinkedHashMap等。
    ,首先需要改变方式,则需要使用比较器:Comparator,实现该接口public compare(T o1,To2)方法即实现,在之后使用keySet方法获取key值,最后输出结果
    PHP数组函数有:sort()函数、rsort()函数、asort()函数、ksort()函数、arsort()函数、krsort()函数。
    “php”遍历目录下“txt”文件且按时间方法是:首先打开目录句柄,从目录句柄读取条目,接着目录,如果读取条目为目录,则递归,然后获取文件修改日期,日期为键值保存到数组,最后日期对数组进行
    本文来自java快速入门栏目,文详细为大家分析了hashmap工作原理,希望帮助到大家。
    二叉搜索树又称二叉查找树或二叉树,一棵二叉搜索树是二叉树来组织使用一个链表数结构来表示,其每一个结点就是一个对象;一般地,除了key和卫星数之外,每个结点还包含属性lchild、rchild
    java调试程方法是:首先在需要调试地方设置断点,并开始Debug,如果是web程需要将服务器Debug模式启动,然后运行程进行调试,调试信息修改程
    java比较字符串大小方法是:使用compareTo()函数来比较字符串大小,具体语法格式为【str1.compareTo(str2)】。该方法字符串在字典来判断字符串大小。
    本文由java入门程栏目为大家介绍遍历ArrayList集合元素方法,希望帮助到有需要同学。

    专题推荐

    推荐视频教程
  • Java多线程与并发库高级应用视频教程Java多线程与并发库高级应用视频教程
  • 极客学院Java8新特性视频教程极客学院Java8新特性视频教程
  • Java游戏项目:拼图游戏的开发视频教程Java游戏项目:拼图游戏的开发视频教程
  • 最新Java完整视频教程最新Java完整视频教程
  • 视频教程分类