1. 关于HashMap的一些说法

(1)HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。

(2)HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。

(3)HashMap实现不同步,线程不安全,HashTable是线程安全 。

(4)HashMap中的key-value都是存储在Entry中的。

(5)HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性。

(6)解决冲突主要有三种方法:定址法,拉链法,再散列法。

HashMap是采用拉链法解决哈希冲突的

  链表法是将相同hash值的对象组成一个链表放在hash值对应的槽位;

用开放定址法解决冲突的做法是

  当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。

拉链法解决冲突的做法是

  将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组T[0…m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于1,但一般均取α≤1。拉链法适合未规定元素的大小。

2. Hashable和HashMap的区别

(1)继承不同。

public class Hashtable extends Dictionary implements Map  public class HashMap extends  AbstractMap implements Map

(2)Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。

(3)Hashtable 中, key 和 value 都不允许出现 null 值。 在 HashMap 中, null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为 null 。当 get() 方法返回 null 值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为 null 。
  因此,在 HashMap 中不能由 get() 方法来判断 HashMap中是否存在某个键, 而应该用 containsKey() 方法来判断。

(4)两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式。

(5)哈希值的使用不同,Hashtable直接使用对象的hashCode。而HashMap重新计算hash值。

(6) Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。

  Hashtable中hash数组默认大小是11,增加的方式是old*2+1。

  HashMap中hash数组的默认大小是16,而且一定是2的指数。

: HashSet子类依靠hashCode()和equal()方法来区分重复元素。

  HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值的,会去判断当前Map中是否含有该Key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。

HashMap和Hashtable相关推荐

  1. HashMap 和 Hashtable 的 6 个区别,最后一个没几个人知道!

    HashMap 和 Hashtable 是 Java 开发程序员必须要掌握的,也是在各种 Java 面试场合中必须会问到的. 但你对这两者的区别了解有多少呢? 现在,栈长我给大家总结一下,或许有你不明 ...

  2. Java HashMap和Hashtable的区别

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable ...

  3. HashMap、HashTable、ConcurrentHashMap、HashSet区别 线程安全类

    HashMap专题:HashMap的实现原理--链表散列 HashTable专题:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析 Hash,Tree数据结构时 ...

  4. HashMap和Hashtable及HashSet的区别

    Hashtable类     Hashtable继承Map接口,实现一个key-value映射的哈希表.任何非空(non-null)的对象都可作为key或者value.     添加数据使用put(k ...

  5. java源码之HashMap和HashTable的异同

    代码版本 JDK每一版本都在改进.本文讨论的HashMap和HashTable基于JDK 1.7.0_67 1. 时间 HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2.从 ...

  6. HashMap和Hashtable的区别总结

    文章目录 前言 源码分析 继承关系的不同: HashMap Hashtable 是否支持键值为null不同: HashMap Hashtable 初始化和扩容的方式不同: Hashtable Hash ...

  7. HashMap、Hashtable、ConcurrentHashMap的原理与区别

    HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相 ...

  8. 一文读懂JDK7,8,JD9的HashMap,HashTable,ConcurrentHashMap及他们的区别

    内容和标题一样长哦,人家写了好久的.如无特别指明,内容对应的源码是jdk1.7(后面会和1.8对比) 1:hashmap简介(如下,数组-链表形式) HashMap的存储结构 图中,紫色部分即代表哈希 ...

  9. hashMap和hashTable的区别(个人总结)

    首先hashmap和hashtable继承的类不同: 第二:所以从公开的方法上来看,这两个类提供的,是一样的功能.都提供键值映射的服务,可以增.删.查.改键值对,可以对建.值.键值对提供遍历视图.支持 ...

  10. HashMap 和 HashTable 区别

    来源:http://www.importnew.com/7010.html HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚 ...

最新文章

  1. Linux系统新手学习的11点建议
  2. Why Java Sucks and C# Rocks(3):Attribute与Annotation
  3. 更改计算机名引起的奇怪问题:“重新启动计算机之前控制台无法刷新”
  4. CSS 文字处理总结
  5. 上海内推 | 极氪智能科技百万年薪「氪学家」项目招聘规控/感知算法工程师
  6. android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)
  7. 备战蓝桥杯—有边数限制的最短路 (bellman_ford+)——[AcWing]有边数限制的最短路
  8. 从网页上考的代码考到eclipse里面,会出现每行开头的空格下面有红色异常提示,为什么?...
  9. 超视频化到来,你能看到什么?
  10. 区块链支付平台技术的应用
  11. 点击量作弊真的可以检测吗_作弊道德可以使自动驾驶汽车可行吗?
  12. jQuery判断浏览器是移动端还是电脑端自动跳转
  13. 详解C3P0(数据库连接池)
  14. 概念性知识与程序性知识的关系
  15. 从零搭建Spring Boot脚手架(2):增加通用的功能(转载)
  16. 动图如何在线制作?教你一键在线制作动图
  17. 【golang】timer 和 ticker
  18. shortcut connection和highway network
  19. Oracle 设置密码复杂度
  20. Vmware安装迷你版的 Centos6 并配置 Nat 模式可访问外网

热门文章

  1. python sizeof函数_C++ sizeof 运算符 | 菜鸟教程
  2. Zabbix的问题日志清单查看
  3. 一周一论文(翻译)——[SIGMOD 2015] Congestion Control for Large-Scale RDMA
  4. 数据库系统概论:第二章 关系数据库
  5. java mp3 暂停,Java MP3播放器 - 使用jLayer播放,暂停和搜索不能正常工作
  6. java中四种常用的引用类型_java中四种引用类型
  7. java httpinvoker漏洞_Java反序列化漏洞学习
  8. ajax发送post请求_按键精灵安卓版发送post和get请求
  9. 系统中多种隐藏超级用户添加方法第1/2页
  10. 在IIS上搭建WebSocket服务器(三)