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

一.概述

??前面介绍了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

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

时间: 2024-10-11 12:19:59

java基础进阶篇(六)_HashTable------【java源码栈】的相关文章

java基础进阶篇(七)_LinkedHashMap------【java源码栈】

目录 一.概述 二.特点 三.应用场合 四.构造方法 1.参数为空 2.accessOrder 五.源码结构分析 六.常见问题 1.如何实现的元素有序? 2.如何保证顺序的正确以及同步 3.如何实现两种顺序(插入顺序或者访问顺序)? 4.为什么重写containsValue()而不重写containsKey()? 七.常用方法 一.概述 ??LinkedHashMap是HashMap的子类,关于HashMap可以看下前面的章节:java基础进阶篇 HashMap public class Lin

java基础进阶篇(五)_HashSet------【java源码栈】

目录 一.概述 二.源码分析 1.HashSet 源码 2.两个重要成员变量 三.构造方法 1.public HashSet(); 2.public HashSet(Collection<? extends E> c); 3.public HashSet(int initialCapacity, float loadFactor); 4.public HashSet(int initialCapacity); 5.特殊的构造方法 四.常用方法 1.int size() 2.boolean is

Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为了安全或者效率问题,会把一些重要的功能放到native层,那么这样一来,我们前篇说到的Eclipse调试smali源码就显得很无力了,因为核心的都在native层,Android中一般native层使用的是so库文件,所以我们这篇就来介绍如何调试so文件的内容,从而让我们破解成功率达到更高的一层.

java基础,集合,Arraylist,源码解析(基础)

ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 内部如何实现 1 /** 2 * The array buffer into which the elements of the ArrayList are stored. 3 * The capacity of the ArrayList is the length of this array b

java web进阶篇(四) Tomcat数据源

动态web开发的最大特点是可以进行数据库的操作,传统的jdbc操作由于步骤重复性造成程序性能下降. 先来回顾JDBC的操作原理 1.加载数据库驱动程序,数据库驱动程序通过classpath配置. 2.通过DirverManager类取得数据库连接对象. 3.通过Connection实例化PreparedStatement对象,编写sql语句命令操作数据库. 4.数据库属于资源操作,操作完成后要关闭数据库以释放资源. 其实以上操作,1.2.4步骤是重复的,保留3,实际上就是数据源产生的原因. 数据

java web进阶篇(三) 表达式语言

表达式语言(Expression Language ,EL)是jsp2.0中新增的功能.可以避免出现许多的Scriptlet代码 格式: ${ 属性名称 },  使用表达式语言可以方便的访问对象中的属性,提交的参数或者进行各种数学运算,而且使用表达式语言最大的特点是如果输出的内容是null,则会自动使用空字符串("")表示. <%request.setAttribute("name", "info");%> <h1>${n

Java异常处理终结篇——如何进行Java异常处理设计

有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码. 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲异常处理的机制和原理. 在我自己研究Java异常处理之前,我查过很多资料,翻过很多书藉,试过很多搜索引擎,换过很多英文和中文关键字,但是关于异常处理设计的文章实在太少,在我研究完Java异常处理之后,我面试过很多人,也问过很多老员工,极少碰到对Java异常有研究的人,看来研究这个主题的人很少,本文内

java socket控制台版本聊天室程序源码下载

原文:java socket控制台版本聊天室程序源码下载 代码下载地址:http://www.zuidaima.com/share/1550463257578496.htm java socket控制台版本聊天室程序源码下载,学习的时候写的,适合学习java基础 java网络编程基础用 标签: java socket 控制台 聊天室 源码话题: 网络编程 java socket控制台版本聊天室程序源码下载,布布扣,bubuko.com

java里面的FutureTask简单使用(配合源码讲解)

最近无意间看到了关于AsyncTask的一篇分析文章AsyncTask源码分析,记得很早之前还看过郭神博客里面分析了AsyncTask源码.去查看AsyncTask源码会发现里面使用了FutureTask在它自己的构造函数里面,我的sdk是android-23里面查看的. /** * Creates a new asynchronous task. This constructor must be invoked on the UI thread. */ public AsyncTask() {