前几天在写《HashMap 和 Hashtable 的 6 个区别》这篇文章的时候,差点把 Hashtable 写成了 HashTable,后来看源码证实了是:Hashtable,小写的 "t"able...当时就很好奇,Hashtable 为什么不是 HashTable 呢? 作为一名初级的 Java 程序员都应该知道的基本的驼峰命名规则,为什么 JDK 代码里面还有这种不规范的命名呢?...最佳答案是: Hashtable was created in Java v1....顺便说一下,这样就使得 Hashtable 过时了,所以不应该在新代码中继续使用它。 栈长看了下,Hashtable 确实是 JDK1.0 添加的,最早的一个集合类,这样也说得过去。...另外,关于《HashMap 和 Hashtable 的 6 个区别》,有人留言说可以使用 currenthashtable。 ?
添加key-value的hash值算法不同:HashMap添加元素时,是使用自定义的哈希算法,而HashTable是直接采用key的hashCode() 实现方式不同:Hashtable 继承的是 Dictionary...迭代器,而Hashtable的enumerator迭代器不是fail-fast的。...而Hashtable 则不会。...多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。...由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
本篇文章主要是对 PHP HashTable 总结,下面的参考链接是很好的学习资料。...——《数据结构与算法分析 C语言描述》 HashTable 是 PHP 的灵魂,因为在 Zend 引擎中大量的使用了 HashTable,如变量表,常量表,函数表等,这些都是使用 HashTable 保存的...使用Hashtable,程序员才能使用字符串或者其他的复合类型作为数组的键。...关于 HashTable 的几个概念 键(key):用于操作数据的标示,例如PHP数组中的索引,或者字符串键等等。...所以,整体来看 HashTable 主要依赖 arData 实现元素的存储、索引。
简介 HashTable是Map接口线程安全实现版本,数据结构和方法实现与HashMap类似。...方法解析 构造函数 初始化HashTable时,都会直接进行容量初始化。 // public Hashtable(Map<? extends K, ?...线程是否安全:HashMap是线程不安全的,HashTable是线程安全的;HashTable内部的方法基本都经过 synchronized修饰; 对Null key 和Null value的支持:HashMap...,Hashtable默认的初始大小为11,之后每次扩容,容量变为原来的2n+1。...之后每次扩充,容量变为原来的2倍; 创建时如果给定了容量初始值,那么Hashtable会直接使用你给定的大小,而HashMap会将其扩充 为2的幂次方大小。
1 HashTable HashTable和HashMap的关系最近,可以认为是HashMap的线程安全版本。...1.2 对比 HashTable和HashMap的区别主要有: HashMap是非线程安全的,HashTable是线程安全的。HashTable实现线程安全的办法是在方法上加同步锁,因此性能更差。...HashMap允许插入null值,而HashTable不允许。插入null时,HashTable会抛出NullPointerException。...HashMap默认初始化数组大小是16,HashTable的默认初始化数组大小是11。HashMap扩容容量变为2n,HashTable扩容时容量变为2n+1,这样元素分布更为均匀。...HashTable中的同步方法实际上是对整个HashTable对象加锁,任何操作都会锁住整个对象。这样,当操作变多时,或者HashTable变大时,性能会很差。
今天我们来分析一下Hashtable的底层实现。提到Hashtable可能对于有些人来说会比较陌生,因为不经常使用。这是因为Hashtable是很早就有的集合类了,因为它是在JDK1.0版本中存在的。...HashMap集合是在Hashtable集合之后才有的。也可以理解为HashMap集合是优化后的Hashtable。...既然我们已经掌握了HashMap的底层实现,那么我们在分析Hashtable时会比较容易,所以本篇中将直接分析Hashtable的底层源码,将不在介绍哈希表的相关知识了。...上面源码是Hashtable集合初始化时所调用的方法,也就是我们通过默认无参的构造方法创建Hashtable对象时,就会执行上述代码。...value Hashtable不能保存相同的key元素,如果元素的key相同,则将后添加到Hashtable中的元素的value覆盖原Hashtable已经存在的元素的value Hashtable执行再散列时
转载请以链接形式标明出处: 本文出自:103style的博客 base on jdk_1.8.0_77 目录 Hashtable简介 Hashtable的全局变量介绍 Hashtable的构造函数...Hashtable数据操作的函数 Hashtable和HashMap的异同 小结 参考文章 ---- Hashtable简介 和 HashMap 一样,Hashtable 也是一个散列表,它存储的内容是键值对...所以 Hashtable 是一个线程安全的键值对的集合。...Hashtable遇到 null,直接返回 NullPointerException。 Hashtable 方法是同步,而HashMap则不是。...---- 小结 Hashtable 的数据操作方法基本都是通过synchronized修饰来实现同步的。 Hashtable 是一个线程安全的键值对的集合。
概要 - HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口 - 主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于HashTable...- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许 - 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是 hashMap
Hashtable 在 Java 中的定义为: public class Hashtable extends Dictionary implements Map<...Hashtable 源码解读 成员变量 Hashtable是通过"拉链法"实现的哈希表。...count 是 Hashtable 的大小,它是 Hashtable 保存的键值对的数量。 threshold 是 Hashtable 的阈值,用于判断是否需要调整 Hashtable 的容量。...public Hashtable():默认构造函数,容量为 11,加载因子为 0.75。 public Hashtable(Map<? extends K, ?...Hashtable 方法是同步,而HashMap则不是。
3.3 Hashtable的用法 马克-to-win:假如我们想把张三20岁,李四30岁这样的信息存入一个容器, 将来一查张三多少岁, 立刻能出来, 就用到Hashtable,张三---->20,...; import java.util.*; class TestMark_to_win { public static void main(String args[]) { Hashtable...n = new Hashtable(); n.put("thre", new Integer(3)); n.put("for", new Integer(4));
HashTable也是一个散列表,与HashMap类似,但它是线程安全的。...HashTable的键和值都不能为null值。HashTable在多线程环境下使用时,性能较差,因为它使用了同步锁来保证线程安全。...Java代码示例: Hashtable hashtable = new Hashtable(); hashtable.put("A", 1); hashtable.put...("B", 2); hashtable.put("C", 3); System.out.println(hashtable.get("A")); 三、ConcurrentHashMap ConcurrentHashMap...效率 HashMap的效率高于HashTable,ConcurrentHashMap的效率高于HashTable。
那么HashTable又是怎样的? 字面上看应该还是利用的Hash表来处理的。那么我们基于这样一点知识来学习一下HashTable的设计和实现过程。 ?...从结构上看,HashTable的结构也没有HashMap那么复杂。所以实现起来应该还是比较简单吧。从类的静态变量看,基本和HashMap没有什么差别。...比如table、threshold、loadFactor,似乎说明HashTable也仅仅是HashMap的小弟弟。那么是这样吗?咋从初始化方法看起。...this(11, 0.75f); } public Hashtable(Map<?...而且看的出来Hashtable相比与HashMap还是相当的保守呀。 那么在添加元素的时候,hashtable又是如何做的呐?是否和hashmap一样?
HashMap与Hashtable都实现了Map接口。 Hashtable在一开始便有了,而HashMap在JDK1.2后才出现。...它们主要区别: 1、线程安全性 Hashtable是线程安全的,它的每一个方法都是同步(synchronize)的。...在多线程中我们可以直接使用Hashtable,多个线程可以共享Hashtable,而不需要我们来给它创建同步; HashMap不是线程安全的,在多线程状态下,可能会产生死锁的状态,当然你也可以自己创建同步...2、接受null值 Hashtable是不接受键值(key)和值(value)为null的; 而HashMap恰恰与上面相反。...3、对外提供的方法 Hashtable比HashMap多提供 elments() 和 contains() 两个方法。
【IT168 技术文档】在仔细分析源代码之前,我们来看看Hashtable提供的一些接口方法。...Hashtable的用法 Hashtable 有2个构造函数 public Hashtable( int initialCapacity); // 指定容量大小 public...} Demo1 Hashtable sTable = new Hashtable(); sTable.put( “ wuhua “ , “ wuhua...的容器字段,因此可以说Hashtable是不允许序列化的。...下面再来看看Hashtable里面一个扩充容器的算法。
提到哈希表,稍微有点编程基础的人都会对其非常熟悉。哈希表一种键值对的数据结构。那么回到最开始的位置,如果要我们来实现一个哈希表的,我们会怎么实现。
概述 与 HashMap 类似,Hashtable 也是散列表的实现。它的内部结构可以理解为「数组 + 链表」的形式,结构示意图如下: ? Hashtable 的类继承结构与签名如下: ?...成员变量 // Hashtable 内部存储元素的数组 private transient Entry<?,?...,初始容量为 11,负载因子为 0.75 public Hashtable() { this(11, 0.75f); } // 构造一个空的 Hashtable,指定初始容量,负载因子为 0.75...public Hashtable(int initialCapacity) { this(initialCapacity, 0.75f); } // 构造一个空的 Hashtable,指定初始容量和负载因子...public Hashtable(Map<?
public class SamplesHashtable { public static void Main() { // Create and initialize a new Hashtable...Hashtable table = new Hashtable(); //Student Name, Grade table.Add("Jay", 100); ...Vinaya", 80); table.Add("Lakshan", 87); // Display the properties and values of the Hashtable...Console.WriteLine(); PrintItems ("All Grades", table.Values); } public static void PrintTable( Hashtable
HashMap允许null key和null value,而hashtable不允许。 2 HashTable是线程安全的一个Collection。...HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。...HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。...最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 ...public static void main(String args[]) { HashTable h=new HashTable(); h.put("用户1",new Integer(90))
作者:王兴 HashMap与Hashtable的区别 HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。...作者 Hashtable的作者: ? HashMap的作者: ? Hash Map的作者比Hashtable的作者多了著名顶顶的并发大神Doug Lea。他写了util.concurrent包。...虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。...造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。另一方面可能是因为Hashtable没有遵循驼峰命名法吧。。。 3....之所以会有这样的不同,是因为Hashtable和HashMap设计时的侧重点不同。Hashtable的侧重点是哈希的结果更加均匀,使得哈希冲突减少。
概述 上次讨论了HashMap的结构,原理和实现,本文来对Map家族的另外一个常用集合HashTable进行介绍。HashTable和HashMap两种集合非常相似,经常被各种面试官问到两者的区别。...但是HashTable中是不允许保存null的。 HashMap的迭代器(Iterator)是fail-fast迭代器,但是Hashtable的迭代器(enumerator)不是fail-fast的。...原理 HashTable类中,保存实际数据的,依然是Entry对象。其数据结构与HashMap是相同的。 ?...HashTable类继承自Dictionary类,实现了三个接口,分别是Map,Cloneable和java.io.Serializable,如下图所示。 ?...总结 HashTable相对于HashMap的最大特点就是线程安全,所有的操作都是被synchronized锁保护的
领取专属 10元无门槛券
手把手带您无忧上云