HashMap, LinkedHashMap 和 TreeMap的区别
HashMap, LinkedHashMap 和 TreeMap的区别
Java里面的HashMap, LinkedHashMap 和 TreeMap 有什么区别?我看不出以下3个key和value有什么不同的。Hashtables里面又是怎么样的呢?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values()); SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
回答一
所有这三个类都实现Map接口,并且提供功能大部分都是一样的。最重要的区别是通过entry进行迭代的顺序:
- HashMap完全不保证迭代的顺序。它可以完全改变元素添加的顺序
- TreeMap会根据 key的compareTo() 方法(或者是一个外部的比较器) 来实现一个自然顺序 进行迭代,另外他实现了SortedMap接口(含有依赖于这个排序顺序的方法)
- LinkedHashMap将会按entry插入map的顺序进行迭代
“Hashtable” 是 基于hash的映射的一个通用名字。在Java 的API里面,Hashtable是一个来自于Java1.1版本,在集合框架存在之前的已经过时的类了。他不应该再次被使用了,因为他的API里面充斥着各种过时的方法和重复的功能。并且他的方法是基于synchronized的(可能会降低性能并且通常来说是用不到的)。用ConcurrentHashMap去替代它吧。
回答二
这3个都是唯一的key到一个value的映射,故而都实现了map接口
HashMap是一个基于key的哈希映射。它支持 O(1) 时间复杂度的get/put操作。key一定要一致地实现hashCode() 和 equals()方法,这样才能使得HashMap可以正常工作。
LinkedHashMap和HashMap很像,但是它添加对于元素插入顺序的保存,所以他的迭代顺序是和插入顺序相同的(或者是访问顺序,取决于构造器的参数)
TreeMap是一种基于树的映射。它的put/get操作需要O(log n)的时间复杂度。它要求item的元的Comparable or Comparator有相同的比较机制。而它的迭代次序就是基于这个机制的。
文章翻译自Stack Overflow:https://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap
HashMap, LinkedHashMap 和 TreeMap的区别相关推荐
- java treemap 内存_Java中Map、HashMap、LinkedHashMap、TreeMap的区别
Map: Map是一个接口不能实例化,Map接口主要有两个实现类:HashMap和TreeMap类.其中,HashMap类按哈希算法来存取对象,而TreeMap类可以对键对象进行排序: Map提供了一 ...
- HashMap,LinkHashMap和TreeMap的区别
最近学习JAVA WEB 至少,虽然之前用过不少HashMap来实现各种功能,一直以来已为Map就是无序的,今天才知道LinkedHashMap的真实意义: 1.Map map = newLinked ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- Hashtable TreeMap HashMap LinkedHashMap的区别
Hashtable TreeMap HashMap LinkedHashMap的区别 Hashtable TreeMap HashMap LinkedHashMap详解 Hashtable 1.内部存 ...
- JavaSE学习总结(十四)Map集合/Map和Collection的区别/HashMap/LinkedHashMap/TreeMap/集合间的嵌套/Hashtable/Collections工具类
一.Map集合 我们知道,一个学号就能对应一个学生,并且每个学生的学号都不同,学号就像一个键,对应的学生就是该键对应的值.日常生活中经常能见到这种类似学号对应学生的例子.Java 为了我们更加方便地去 ...
- Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别
一. HashMap 1)底层实现 数组+链表+红黑树(在JDK1.8中如果链表长度大于8的时候才转换为红黑树) 2)是否线程安全 不支持线程的同步,线程不安全,如需同步,可用Collections ...
- ArrayList ,LinkedList,Vector,StringBuilder,StringBuffer ,String,HashMap,LinkedHashMap,TreeMap
ArrayList ,LinkedList,Vector 区别和联系 从上面的类层次结构图中,我们可以发现他们都实现了List接口,它们使用起来非常相似.区别主要在于它们各自的实现,不同的实现导致了不 ...
- HashMap常见键、LinkedHashMap以及TreeMap的理解
HashMap四种常见的键的类型: HashMap<String,String>.HashMap<Integer,String>.HashMap<String,Stude ...
- Java中的Map集合及其子类HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap
一 .Map public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口哦取代了Dictionary类,后者完全是 ...
最新文章
- 重学ES6 函数的扩展(下)
- 从源码分析DEARGUI之add_progress_bar
- css 设置table样式
- C#部署安装,将用户安装路径记录下写入注册表,并启动
- maven overlay 扩展
- 【PC工具】传说中最好的编程手册管理软件Zeal,支持194种编程文档,学习编程语法查阅必备工具...
- 怎么改PHP_PHP实现RPC(简版)
- Windows中常用的git GUI客户端的介绍
- c语言程序设计科学出版色,C语言程序设计9787030330123张淑华科学出版社
- vue-cli3配置externals、jquery
- Asp.net(C#)中备份还原SQL Server数据库实现
- 第三篇:白话tornado源码之请求来了
- VMware ESXi下虚拟机的嗅探设置
- matlab 显示图像 去掉边框,Matlab显示图像时去除灰色边框
- c语言斐波那契数列for循环数组,C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列...
- 51单片机外设篇:电机
- iOS/苹果开发者账户添加测试设备UDID
- WPF 设置窗口不跟随触摸惯性拖动抖动
- Mapper 与 Reducer 解析
- 计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署