Java之TreeMap浅谈
发布日期:2021-05-27 02:54:13 浏览次数:26 分类:技术文章

本文共 1402 字,大约阅读时间需要 4 分钟。

TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。

HashMap<K,V>的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。

如果你需要得到一个有序的结果时就应该使用TreeMap,TreeMap是非线程安全的。

TreeMap中默认是按照升序进行排序的,通过自定义的比较器来实现降序。

定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo进行比较,而compareTo默认规则是:

  • 如果参数字符串等于此字符串,则返回 0 值;

  • 如果此字符串小于字符串参数,则返回一个小于 0 的值;

  • 如果此字符串大于字符串参数,则返回一个大于 0 的值。

自定义时取反即可,智慧通过自定义类将其作为参数传递进TreeMap的构造方法中,就可以使用自定义降序了。

代码如下:

public class Test {    public static void main(String[] args) {        //初始化自定义比较器        MyComparator comparator = new MyComparator();        //初始化一个map集合        Map
map = new TreeMap
(comparator); //存入数据 map.put("a", "a"); map.put("b", "b"); map.put("f", "f"); map.put("d", "d"); map.put("c", "c"); map.put("g", "g"); //遍历输出 Iterator iterator = map.keySet().iterator(); while(iterator.hasNext()){ String key = (String)iterator.next(); System.out.println(map.get(key)); } } static class MyComparator implements Comparator { @Override public int compare(Object o1, Object o2) { String param1 = (String)o1; String param2 = (String)o2; //return param1.compareTo(param2); return -param1.compareTo(param2); } }}

 

转载地址:https://blog.csdn.net/leijie0322/article/details/112787379 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java之ID生成的常见方式
下一篇:Java之socket浅析

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年07月09日 02时48分07秒