hashmap and hashtable

①继承不同。

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

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

Hashtable中,key和value都不允许出现null值。

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

④两个遍历方式的内部实现上不同。

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

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

Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

时间: 2024-10-04 00:34:50

hashmap and hashtable的相关文章

HashMap和Hashtable

HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别.主要的区别有:线程安全性,同步(synchronization),以及速度. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行). HashMap是非synchronized,而Hashtable

HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别

HashMap 是否是线程安全的,如何在线程安全的前提下使用 HashMap,其实也就是HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别.当时有些紧张只是简单说了下HashMap不是线程安全的:Hashtable 线程安全,但效率低,因为是 Hashtable 是使用 synchronized 的,所有线程竞争同一把锁:而 ConcurrentHashMap 不仅线程安全而且效率高,因为它包含一个 segment 数组,将

HashMap和Hashtable的区别

导读: 1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值.HashMap允许null key和null value,而hashtable不允许. 2   HashTable是线程安全的一个Collection. HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可

hashMap和hashTable区别

[不定项选择题] 有关hashMap跟hashTable的区别,说法正确的是? HashMap和Hashtable都实现了Map接口 HashMap是非synchronized,而Hashtable是synchronized HashTable使用Enumeration,HashMap使用Iterator Hashtable直接使用对象的hashCode,HashMap重新计算hash值,而且用与代替求模 答案:A.B.C.D 来自牛客网的一网友评论,(尊重原评论,小弟在此受教.) HashTa

Java集合HashMap和Hashtable的区别

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别于HashMap允许空(null)键值(key),由于线程安全,效率上高于Hashtable. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许.HashMap把Hashtable的contains(包含)方法去掉了,改成containsvalue和containsKey.因为contains方法容易让人引起误解. Hashtable继承Dictio

HashMap 和 Hashtable的比较

1)都实现了 Map 接口,HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许. 2)HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsValue 和containsKey. 3)Hashtable 是基于陈旧的 Dictionary 类的, HashMap 是 Java 1.2引进的 Map接口的一个实现. 4)Hashtable 是线程安全的,也就是说是同步的,而 HashMap

Java的HashMap和HashTable

Java的HashMap和HashTable 1. HashMap 1)  hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了.如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾. 2)使用 Map map = new Has

java读书笔记---HashMap和HashTable

首先来说说HashMap,HashMap是一个类,Java中所有的类都继承自一个Object类.Object类中定义了hashCode()方法,换言之,任何类都会有这个hashCode()方法. 因此key.hashCode()函数调用的是key键值类型自带的哈希函数,返回int型散列值. 先来看HashMap中定义的两个方法 方法一: static final int hash(Object key) { //jdk1.8 & jdk1.7 int h; // h = key.hashCode

ArrayList、Vector、LinkedList、HashMap、HashTable的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,次数组元素大于实际存储的数据以便添加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通过性能上校ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项即可,所以插入速度较快. HashMap和HashTable的区别: 二者都实现了 M

Java中的HashMap和HashTable到底哪不同?

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:456544752  我们一起学Java! HashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案. 代码版本 JDK每一版本都在改进.本文讨论的HashMap和HashTable基于JDK 1.7.0_67.源码见这里 1. 时间 HashTable产生于JDK 1.1,而HashMap产生