码迷,mamicode.com
首页 > 编程语言 > 详细

java基础进阶篇(六)_HashTable------【java源码栈】

时间:2020-03-05 18:01:27      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:class   mamicode   基础   abstract   原理   使用   除了   散列   内容   

一.概述

技术图片

??前面介绍了HashMap的结构和原理,这里介绍个类似HashMap的结构Hashtable。
??HashTable 官方解释是HashMap的轻量级实现, 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射
??所以我们结合HashMap来介绍HashTable, 比较下两者的区别。
??HashTable 使用的很少, 它支持线程安全, 通过内部方法加上 synchronized 实现, 因此同步锁的密度太大了, 在实际情况中笔者用的很少, 所以关于方法就不像HashMap 详细介绍了.后面会单独准备一章解决HashMap的线程同步问题.

二.和HashMap的比较

1.不同点

1).接口

??Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
??HashMap继承AbstractMap,实现了Map, Cloneable, Serializable接口。

2).线程安全

??Hashtable 线程安全,支持多线程并发, 内部方法使用synchronized 关键字约束同步代码块.
??HashMap 线程不安全,需要开发人员额外解决. 后面章节会专门解释并发情况下数组和集合的处理.

3).初始容量和扩容

??HashTable默认容量是11, 负载因子是0.75, 看下构造方法的源码:

/**
 * Constructs a new, empty hashtable with a default initial capacity (11)
 * and load factor (0.75).
 */
public Hashtable() {
    this(11, 0.75f);
}

??HashMap默认容量是16,负载因子是0.75. 查看源码:

/**
 * Constructs an empty <tt>HashMap</tt> with the default initial capacity
 * (16) and the default load factor (0.75).
 */
public HashMap() {
    this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
}

4).键值null 的情况

??HashTable 键值都不允许为null.
??HashMap 键值允许为null.

2.相同点

??HashTable也是使用拉链法,即底层使用数组和链表实现哈希表
??HashTable也实现了Map 接口, 支持Map的方法.

三.结构图

这是HashTable 的结构图, 除了继承的父类不同, 其他和HashMap 相同, 一样的散列表结构. 用的很少.使用方法和HashMap 一样.

具体使用除了线程安全都可以参照笔者前一章节: java基础进阶篇(四)_HashMap
技术图片

java基础进阶篇(六)_HashTable------【java源码栈】

标签:class   mamicode   基础   abstract   原理   使用   除了   散列   内容   

原文地址:https://www.cnblogs.com/tingbogiu/p/12421544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!