`
qiushyfm
  • 浏览: 97072 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

HashMap VS Hashtable

阅读更多

一:选手入场

首先介绍这两个PK对象的区别:

1Hashtable继承自Dictionary类,而HashMapMap接口的一个实现。这里要说明一下Dictionary类是jdk1.0中就有的,而Map接口是1.2之后才有的,当然与此同时Hashtable也实现了Map接口。

2:最重要的区别:Hashtable是线程同步的,而HashMap是线程不同步的。也就是说当我们的应用处于多个线程访问时,Hashtable是安全的,而HashMap要通过额外的同步机制:一般Collections的一个静态方法得到解决: 

Map m = Collections.synchronizedMap(new HashMap(...));

这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。

3HashMap可以用null做为键(当然只能有一个),还可以有多个null的值,Hashtable不可以存在null的键值。

当需要判断是否存在某个键映射一个值时:HashMap去掉了HashtablecontainsObject value)方法,保留了containsValueObject value)和containsKeyObject key)方法,因为containscontainsValue方法确实太像。

 

 

二:比赛开始:

比较优缺点:

1:效率:由于Hashtabe是线程同步的,当大量的并发访问的时候,速度肯定要比HashMap慢的多,当然这个的前提是:我们的程序不需要保证线程同步。

也就是说在不需要保证线程同步的情况下:我们应该选择Hashmap。暂时HashmapHashtable的比分是:10

    大多数的应用是需要保证线程安全的:这个时候好像Hashtable先天有优势,但HashMap使用上面(区别:2)的方法一样可以保证线程安全,在这种情况下天才和后天努力者的对决好像势均力敌,难分高下,现在的比分是2:1

2:空间:Hashtable的初始容量为11,而HashMap初始化容量为16.并且他们的加载因子默认都为0.75。前者的增加方式是 old*2+1;后者为old*2;也就是说当Hashtable中存在8个键值时,它的容量会自动增加到23.HashMap中存在12个键值时,它会增加容量到32

这样看来,一个是基数小增加快,一个是基数大增加慢。比拼结果还是难分高下:32

3:人品:时间和空间上比完就要比人品了。Sunjdk不断更新,很多的类与方法不断的被重写和淘汰,显然后生的要比早生的先进,所以java官方还是支持HashMap的。像Dictionary也早已注明“已过时,建议使用Map接口”。当然Hashtable线程同步的优点还是比较突出的(例如属性文件),觉类似于HashMap的一个子类。结果:4:2

 

三:最后结果:

HashMap在Hashtable的较量中胜出!

4
0
分享到:
评论

相关推荐

    HashMap和HashTable的区别和不同

    ### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...

    hashMap和hashTable的区别

    ### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...

    HashMap与HashTable区别

    ### HashMap与HashTable的区别 在Java编程语言中,`HashMap`和`HashTable`是两种非常重要的数据结构,它们都实现了`Map`接口,并提供了键值对的存储方式。这两种数据结构虽然相似,但在实现细节和使用场景上存在...

    HashMap和HashTable底层原理以及常见面试题

    HashMap和HashTable底层原理以及常见面试题 HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的...

    hashmap与hashtable区别

    ### HashMap与Hashtable的区别 在Java编程语言中,`HashMap`和`Hashtable`是两种非常重要的数据结构,它们都用于存储键值对。然而,在实际应用过程中,这两种数据结构有着本质的不同,下面将详细介绍这些差异。 ##...

    HashMap与HashTable和HashSet的区别

    ### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...

    HashMap与HashTable的区别(含源码分析)

    在Java编程语言中,`HashMap`和`HashTable`都是实现键值对存储的数据结构,但它们之间存在一些显著的区别,这些区别主要体现在线程安全性、性能、null值处理以及一些方法特性上。以下是对这两个类的详细分析: 1. ...

    hashmap和hashtable的区别

    hashmap和hashtable的区别

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    HashMap, HashTable, LinkedHashMap, TreeMap 的区别 在 Java 中,Map 是一个非常重要的集合类,用于存储键值对。其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和...

    HashMap,HashTable,ConcurrentHashMap之关联.docx

    HashMap,HashTable,ConcurrentHashMap 之关联 HashMap、HashTable、ConcurrentHashMap 是 Java 集合类中的重点,以下是对它们的详细解释: HashMap HashMap 是非线程安全的,它的键和值都允许有 null 值存在。...

    hashmap和hashtable的区别.docx

    HashMap 和 Hashtable 是 Java 集合框架中两个重要的映射数据结构,它们都实现了 Map 接口,但具有显著的差异。以下将详细介绍这两个类的主要区别: 1. 线程安全性: - HashMap 不是线程安全的,这意味着在多线程...

    hashMap和Hashtable的区别1

    hashMap和Hashtable的区别1

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap与HashTable的主要区别在于线程安全性和对null值的支持。HashMap是非同步的,意味着在多线程环境中,如果不进行适当的同步控制,可能会导致数据不一致。而HashTable是同步的,因此它在多线程环境下的安全性更...

    有关hashMap跟hashTable的区别,说法正确的是?

    在Java编程语言中,`HashMap`和`HashTable`都是实现`Map`接口的数据结构,用于存储键值对。它们在很多方面有所不同,这些差异主要体现在线程安全性、迭代器类型、null值支持以及哈希码处理等方面。以下是关于两者...

    11.HashMap和HashTable的区别.avi

    11.HashMap和HashTable的区别.avi

    HashMap和Hashtable的区别Java开发Jav

    HashMap和Hashtable的区别Java开发Java经验技巧共2页.pdf.zip

    Java面试题11.HashMap和HashTable的区别.mp4

    Java面试题11.HashMap和HashTable的区别.mp4

    比较Vector、ArrayList和hashtable hashmap

    - HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...

    HashMap和HashTable的区别?但是如果想线程安全有想效率高?

    HashMap和HashTable的区别?但是如果想线程安全有想效率高?

Global site tag (gtag.js) - Google Analytics