HashMap,LinkedHashMap,TreeMap的有序性
HashMap 实际上是一个链表的数组。HashMap 的一个功能缺点是它的无序性,被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。如果希望元素保持输入的顺序,可以使用 LinkedHashMap 替代。
LinkedHashMap继承自HashMap,具有高效性,同时在HashMap的基础上,又在内部增加了一个链表,用以存放元素的顺序。LinkedHashMap内部多了一个双向循环链表的维护,该链表是有序的,可以按元素插入顺序或元素最近访问顺序(LRU)排列,简单地说:LinkedHashMap=散列表+循环双向链表
LinkedHashMap 是根据元素增加或者访问的先后顺序进行排序,TreeMap 则是基于元素的固有顺序 (由 Comparator 或者 Comparable 确定)。而 TreeMap 则根据元素的 Key 进行排序。
public class TreeMapTest {
public static void main(String args[]){
Map<String, Integer> hashMap = new HashMap<>();
System.out.println("hashmap結果");
hashMap.put("1", 1);
hashMap.put("3", 3);
hashMap.put("7", 2);
hashMap.put("2", 7);
hashMap.put("4", 4);
Iterator iterator =hashMap.keySet().iterator();
while (iterator.hasNext()) {
Object key= iterator.next();
System.out.println("key: "+key + "值为:"+hashMap.get(key));
}
System.out.println("treeMap結果");
Map<String, Integer> treeMap = new TreeMap();
treeMap.put("1", 1);
treeMap.put("3", 3);
treeMap.put("7", 2);
treeMap.put("2", 7);
treeMap.put("4", 4);
Iterator iterator1 =treeMap.keySet().iterator();
while (iterator1.hasNext()) {
Object key= iterator1.next();
System.out.println("key: "+key + "值为:"+treeMap.get(key));
}
System.out.println("LinkedHashMap結果");
Map linkMap= new LinkedHashMap<>();
linkMap.put("1", 1);
linkMap.put("3", 3);
linkMap.put("7", 2);
linkMap.put("2", 7);
linkMap.put("4", 4);
Iterator iterator2 =linkMap.keySet().iterator();
while (iterator2.hasNext()) {
Object key= iterator2.next();
System.out.println("key: "+key + "值为:"+linkMap.get(key));
}
}
}
----------运行结果:-----------
linkMap.put("7", 2);
linkMap.put("2", 7); //特意将key的值与value的值不一样,看排序是按照key排序还是value的值排序 hashmap結果 //随机的,此处看不出来
key: 1值为:1
key: 2值为:7
key: 3值为:3
key: 4值为:4
key: 7值为:2
treeMap結果 //可以看到是按照key值排序的,默认升序
key: 1值为:1
key: 2值为:7
key: 3值为:3
key: 4值为:4
key: 7值为:2
LinkedHashMap結果 //按照插入的顺序排序
key: 1值为:1
key: 3值为:3
key: 7值为:2
key: 2值为:7
key: 4值为:4
HashMap,LinkedHashMap,TreeMap的有序性的更多相关文章
- Java中HashMap,LinkedHashMap,TreeMap的区别[转]
原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...
- HashMap,LinkedHashMap,TreeMap对比
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- Java HashMap,LinkedHashMap,TreeMap
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...
- java HashMap,LinkedHashMap,TreeMap应用
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- HashMap,LinkedHashMap,TreeMap的区别(转)
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快 ...
- map,set,list等集合解析以及HashMap,LinkedHashMap,TreeMap等该选谁的的区别
前言: 今天在整理一些资料时,想起了map,set,list等集合,于是就做些笔记,提供给大家学习参考以及自己日后回顾. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允 ...
- HashMap,LinkedHashMap,TreeMap的区别
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复. Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很 ...
随机推荐
- C# 线程安全集合类
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/kang_xuan/article/de ...
- 1031: [编程入门]自定义函数之字符串反转(python)
问题 1031: [编程入门]自定义函数之字符串反转 时间限制: 1Sec 内存限制: 128MB 提交: 7225 解决: 3331 题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入 ...
- C#字符串内插-$
1.字符串内插 $特殊字符将字符串文本标识未内插字符串,可能包含内插表达式的字符串文本. 将内插字符串解析为结果字符串,带有内插表达式的项会替换为表达式结果的字符串表示形式. 在C#6级更高版本语言中 ...
- 使用docker-client创建NFS挂载
docker命令行挂载NFS如下: docker volume create --driver local --opt type=nfs --opt o=addr=192.168.11.129,rw ...
- 利用python将excel数据解析成json格式
利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...
- 如何搭建本地yum源,阿里yum源以及自己的网络yum源?
环境:CentOS7 一.本地源的yum源的搭建 (一)添加新的yum源配置文件iso.repo(名字可以自己命名,但是后缀必须是repo结尾) 注意:目录 /etc/yum.repos.d 下的 . ...
- caoz的梦呓:信息安全,别为了芝麻丢了西瓜
猫宁!!! 参考链接:https://mp.weixin.qq.com/s/z6UI-tdhN1CGdqQQuglLVQ 对方公众号:caoz的梦呓 我之前写微博的时候,经常就有读者反馈说,你怎么用3 ...
- Python 课件笔记
Python 3.0 课件笔记 我们需要做的就是认真听取每一堂课,私下阅读老师博客笔记进行再复习,综合理解后写下自己的笔记,加深印象! Day1 - Python基础1 介绍.基本语法.流程控制
- python3.6调用c语言动态编译文件 c语言编译可执行文件和动态编译等
1.c的代码 dfunc.c #include<stdio.h> int dgfunc(int n) { ){ ; }else{ )+dgfunc(n-); } } 2.动态编译 cmd ...
- 【机器学习】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...