关于java集合框架(三):Map概述与TreeMap
引用:https://blog.csdn.net/w2393040183/article/details/78092318
常用的Map有4种:分别是HashMap,TreeMap,Hashtable和LinkedHashMap等。下面是简单的介绍:
HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。
TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
Tree默认按升序排序,要实现自定义排序需要实现Comparator接口。代码如下:
public static void main(String[] args) {Map<String, String> map = new TreeMap<String, String>(new Comparator<String>() {public int compare(String obj1, String obj2) {// 降序排序return obj2.compareTo(obj1);}});map.put("c", "ccccc");map.put("a", "aaaaa");map.put("b", "bbbbb");map.put("d", "ddddd");Set<String> keySet = map.keySet();Iterator<String> iter = keySet.iterator();while (iter.hasNext()) {String key = iter.next();System.out.println(key + ":" + map.get(key));}}
这里的compareTo方法,查看源码是:
public int compareTo(String anotherString) {int len1 = value.length;int len2 = anotherString.value.length;int lim = Math.min(len1, len2);char v1[] = value;char v2[] = anotherString.value;int k = 0;while (k < lim) {char c1 = v1[k];char c2 = v2[k];if (c1 != c2) {return c1 - c2;}k++;}return len1 - len2;}
该方法,具体效果如下 来自:https://blog.csdn.net/qq_34115598/article/details/79892478
长度短的与长度长的字符一样,则返回的结果是两个长度相减的值(len1-len2):
a="hello";
b="hell";
num=1;
或者
a="h";
b="hello";
num=-4;
2)长度不一样且前几个字符也不一样,从第一位开始找,当找到不一样的字符时,则返回的值是这两个字符比较的值(c1-c2,ascii码相减)
a="assdf";
b="bdd";
num=-1;
2.当两个比较的字符串是英文且长度相等时,
1)一个字符
a="a"; //97
b="b"; //98
num=-1;
2)多个字符,第一个字符不同则直接比较第一个字符
a="ah"; //a=97
b="eg"; //e=101
num=-4
3)多个字符,第一个字符相同则直接比较第二个字符,以此类推
a="ae"; //e=101
b="aa"; //a=97
num=4;
所以该比较器如果将obj1和obj倒过来,会导致原值变成原来的相反数,所以源码里若颠倒,则又变为升序排序。需要注意的是,这样子实现的排序是根据key的值来进行排序的,如果要根据Value值进行排序,需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。代码如下:
public static void main(String[] args) {Map<String, String> map = new TreeMap<String, String>();map.put("2", "ddddd");map.put("12", "bbbbb");map.put("13", "aaaaa");map.put("33", "ccccc");//这里将map.entrySet()转换成listList<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());//然后通过比较器来实现排序Collections.sort(list,new Comparator<Map.Entry<String,String>>() {//升序排序public int compare(Map.Entry<String, String> o1,Map.Entry<String, String> o2) {return o1.getValue().compareTo(o2.getValue());}});for(Map.Entry<String,String> mapping:list){System.out.println(mapping.getKey()+":"+mapping.getValue());}}
结果如下:
13:aaaaa
12:bbbbb
33:ccccc
2:ddddd 可以看到是按value进行了排序。
转载于:https://www.cnblogs.com/MYoda/p/11152213.html
关于java集合框架(三):Map概述与TreeMap相关推荐
- java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合
I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java集合查找Map,Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- [javaSE] 集合框架(Map概述)
Map集合,将key对象映射到value对象 三个主要的子类:Hashtable,HashMap,TreeMap Hashtable:底层是哈希表数据结构,不允许使用null值,线程同步 HashMa ...
- (Java集合框架)Map集合
Map集合 概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对象关系的对象 ...
- java集合框架07——Map架构与源代码分析
前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,因为Set是基于Map实现的,所以这里我们先分析Map,后面章节再继续学习Set ...
- Java集合框架List,Map,Set等全面介绍
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. Java集合框架的基本接口/类层次结构: java.util.Colle ...
- Java OOP 7 JAVA 集合框架
Java OOP 第七章 JAVA 集合框架 文章目录 Java OOP 第七章 JAVA 集合框架 一.学习目标 二.数组存在的缺陷 三.Java集合框架 四.Collection接口 五.Coll ...
- 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析
引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...
- Java 集合框架(5)---- Map 相关类解析(中)
本文标题大纲: 文章目录 前言 HashMap TreeMap 指定 TreeMap 的元素排序方式 前言 还是先上那张图吧,我又偷懒了,还是只关注 Map 接口下的类就行了: 在上上篇文章中我们一起 ...
最新文章
- 你需要掌握的三种编程语言
- 【Python-ML】SKlearn库性能指标-混淆矩阵和F1
- Java后端返回通用接口设计
- 做百度AI工程师,还要会“相牛”?
- ubuntu 开启 apache mod_rewrite
- windows命令提示符_如何个性化Windows命令提示符
- Python基础(二)--数据类型,运算符与流程控制
- EdgeRoutine技术专家教你把JS代码跑到CDN边缘
- python学习之random
- 朗锐智科发布PCIe-3504PoE 千兆以太网图像采集卡
- GitOps—通过CI/CD自动化构建虚拟机模版
- mongodbVUE基本操作(转)
- 圣杯布局(三栏布局)
- Markdown初使用
- GTC '19 经典回顾 | 如何编排和创造二次元中的舞蹈?
- 群晖域名解析出现错误?别慌,排查原因有步骤
- 用邮件联系导师有哪些注意事项需要关注呢?如何选择适合自己的导师呢?
- 剑指offer 青蛙跳楼梯
- 如何把meshlab中的圆环去掉_MeshLab中插件的添加过程
- oracle 速度最快 驱动,c# – Oracle ODP.NET托管驱动程序在64位运行速度比在32位运行速度慢50-100%...
热门文章
- MyBatis的入门知识
- BugkuCTF多种方法解决
- Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类
- CTFshow php特性 web130
- 编程艺术 二进制中1的个数
- OpenCV基本绘图
- calcBackProject函数(搜索小物体的位置)
- springboot配置html资源路径,SpringBoot普通.html文件视图配置
- collections python_python: collections
- 【三种可能问题】RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED