Java的其他Map

一、LinkedHashMap

1.1 应用场景

HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。

1.2 插入顺序和访问顺序

LinkedHashMap默认的构造参数是默认  插入顺序的,就是说你插入的是什么顺序,读出来的就是什么顺序,但是也有访问顺序,就是说你访问了一个key,这个key就跑到了最后面 这里accessOrder设置为false,表示不是访问顺序而是插入顺序存储的,这也是默认值,表示LinkedHashMap中存储的顺序是按照调用put方法插入的顺序进行排序的。LinkedHashMap也提供了可以设置accessOrder的构造方法,我们来看看这种模式下,它的顺序有什么特点?

1 // 第三个参数用于指定accessOrder值 2 Map<String, String> linkedHashMap = new LinkedHashMap<>(16, 0.75f, true); 3 linkedHashMap.put("name1", "josan1"); 4 linkedHashMap.put("name2", "josan2"); 5 linkedHashMap.put("name3", "josan3"); 6 System.out.println("开始时顺序:"); 7 Set<Entry<String, String>> set = linkedHashMap.entrySet(); 8 Iterator<Entry<String, String>> iterator = set.iterator(); 9 while(iterator.hasNext()) { 10 Entry entry = iterator.next(); 11 String key = (String) entry.getKey(); 12 String value = (String) entry.getValue(); 13 System.out.println("key:" + key + ",value:" + value); 14 } 15 System.out.println("通过get方法,导致key为name1对应的Entry到表尾"); 16 linkedHashMap.get("name1"); 17 Set<Entry<String, String>> set2 = linkedHashMap.entrySet(); 18 Iterator<Entry<String, String>> iterator2 = set2.iterator(); 19 while(iterator2.hasNext()) { 20 Entry entry = iterator2.next(); 21 String key = (String) entry.getKey(); 22 String value = (String) entry.getValue(); 23 System.out.println("key:" + key + ",value:" + value); 24 }

二、TreeMap

2.1 概述

  1. TreeMap存储K-V键值对,通过红黑树(R-B tree)实现;
  2. TreeMap继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列的导航定位以及导航操作的方法,当然只是提供了接口,需要TreeMap自己去实现;
  3. TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化;
  4. TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序;
  5. TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。

2.2 应用场景:TreeMap可以实现元素的自动排序。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid