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的区别相关推荐

  1. java treemap 内存_Java中Map、HashMap、LinkedHashMap、TreeMap的区别

    Map: Map是一个接口不能实例化,Map接口主要有两个实现类:HashMap和TreeMap类.其中,HashMap类按哈希算法来存取对象,而TreeMap类可以对键对象进行排序: Map提供了一 ...

  2. HashMap,LinkHashMap和TreeMap的区别

    最近学习JAVA WEB 至少,虽然之前用过不少HashMap来实现各种功能,一直以来已为Map就是无序的,今天才知道LinkedHashMap的真实意义: 1.Map map = newLinked ...

  3. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...

  4. Hashtable TreeMap HashMap LinkedHashMap的区别

    Hashtable TreeMap HashMap LinkedHashMap的区别 Hashtable TreeMap HashMap LinkedHashMap详解 Hashtable 1.内部存 ...

  5. JavaSE学习总结(十四)Map集合/Map和Collection的区别/HashMap/LinkedHashMap/TreeMap/集合间的嵌套/Hashtable/Collections工具类

    一.Map集合 我们知道,一个学号就能对应一个学生,并且每个学生的学号都不同,学号就像一个键,对应的学生就是该键对应的值.日常生活中经常能见到这种类似学号对应学生的例子.Java 为了我们更加方便地去 ...

  6. Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别

    一. HashMap 1)底层实现  数组+链表+红黑树(在JDK1.8中如果链表长度大于8的时候才转换为红黑树) 2)是否线程安全 不支持线程的同步,线程不安全,如需同步,可用Collections ...

  7. ArrayList ,LinkedList,Vector,StringBuilder,StringBuffer ,String,HashMap,LinkedHashMap,TreeMap

    ArrayList ,LinkedList,Vector 区别和联系 从上面的类层次结构图中,我们可以发现他们都实现了List接口,它们使用起来非常相似.区别主要在于它们各自的实现,不同的实现导致了不 ...

  8. HashMap常见键、LinkedHashMap以及TreeMap的理解

    HashMap四种常见的键的类型: HashMap<String,String>.HashMap<Integer,String>.HashMap<String,Stude ...

  9. Java中的Map集合及其子类HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap

    一 .Map public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口哦取代了Dictionary类,后者完全是 ...

最新文章

  1. 重学ES6 函数的扩展(下)
  2. 从源码分析DEARGUI之add_progress_bar
  3. css 设置table样式
  4. C#部署安装,将用户安装路径记录下写入注册表,并启动
  5. maven overlay 扩展
  6. 【PC工具】传说中最好的编程手册管理软件Zeal,支持194种编程文档,学习编程语法查阅必备工具...
  7. 怎么改PHP_PHP实现RPC(简版)
  8. Windows中常用的git GUI客户端的介绍
  9. c语言程序设计科学出版色,C语言程序设计9787030330123张淑华科学出版社
  10. vue-cli3配置externals、jquery
  11. Asp.net(C#)中备份还原SQL Server数据库实现
  12. 第三篇:白话tornado源码之请求来了
  13. VMware ESXi下虚拟机的嗅探设置
  14. matlab 显示图像 去掉边框,Matlab显示图像时去除灰色边框
  15. c语言斐波那契数列for循环数组,C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列...
  16. 51单片机外设篇:电机
  17. iOS/苹果开发者账户添加测试设备UDID
  18. WPF 设置窗口不跟随触摸惯性拖动抖动
  19. Mapper 与 Reducer 解析
  20. 计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署

热门文章

  1. Linux下使用socket传输文件的C语言简单实现
  2. Linux编译程序时加-I指定头文件位置
  3. 网络编程套接字API
  4. 三年Java开发,尚学堂java马士兵全套
  5. 多亏了这篇文章,我的开发效率远远领先于我的同事
  6. C#中实现对象的深拷贝
  7. 移动WEB开发之JS内置touch事件[转]
  8. 【Maven学习】Maven打包生成包含所有依赖的jar包
  9. 灵动标签调用友情链接
  10. C++类的数组元素查找最大值问题