hashset hashtablee,HashSet和Dictionary的区别

看上面的框架图,先抓住它的主干,即Collection和Map。
1 Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。
Collection包含了List和Set两大分支。
(01) List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。
List的实现类有LinkedList, ArrayList, Vector, Stack。
(02) Set是一个不允许有重复元素的集合。
Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。
2 Map是一个映射接口,即key-value键值对。Map中的每一个元素包含&一个key&和&key对应的value&。
AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。
Hashtable虽然继承于Dictionary,但它实现了Map接口。
ArrayList与Vector从总的架构如中可以看到ArrayList与Vector都实现了List接口。List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。List的实现类有LinkedList, ArrayList, Vector, Stack。
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口,能对它进行队列操作。LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。LinkedList 是非同步的。****************ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的&快速随机访问&和&通过Iterator迭代器访问&的效率。ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。******************Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。Vector 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。******************Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用!在&Java 集合系列06之 Vector详细介绍(源码解析)和使用示例&中,已经详细介绍过Vector的数据结构,这里就不再对Stack的数据结构进行说明了。
和ArrayList不同,Vector中的操作是线程安全的。ArrayList与Vector的区别在于:1在扩展上,arraylist变成(150%+1),Vector变成(200%)。2Arraylist不是线程安全的,而Vector是线程安全的;
HashMap与HashSet1HashMap实现的是map接口,HashSet实现的是Set接口;2HashMap存储的是(key,value),HastSet仅仅存储一个key,其实更准确的说是存储一个(key,o),o是HashSet里的一个Object型的成员变量;
HashSet的本质是一个"没有重复元素"的集合,它是通过HashMap实现的。HashSet中含有一个"HashMap类型的成员变量"map,HashSet的操作函数,实际上都是通过map实现的。3添加元素的时候HashMap使用的是put(key,value),HashSet使用的是add(key);
两者都不是线程安全的。两者都不会有重复元素。什么叫重复?就是相等,至于在集合类中什么就算相等可以看看:关于hashCode与equals
HashMap与HashTable1HashMap是非同步的,而HashTable是同步的;2HashMap的key与value都也有为null,而HashTable的key,value都不能为
参考资料:/wanlipeng/archive//1857791.html/skywang12345/p/3308498.html
第二篇博客是java集合相关文章的目录,这篇笔记多次引用了目录里的文章,这里只列出了目录,大家一定去看一下。作者把集合类分析地极为透彻。
阅读(...) 评论()java中的hashset与hashtable有什么区别_百度知道
java中的hashset与hashtable有什么区别
1.前者是Set,后者是Map2.前者允许null元素,后者不允许3.前者非同步,后者是同步的
其他类似问题
为您推荐:
找个面试宝典看看,上面有,什么九阴真经
1.前者是Set,后者是Map2.前者允许null元素,后者不允许3.前者非同步,后者是同步的这个写的不错。 还有,...
hashtable的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁HashTable,HashSet和Dictionary的区别_百度知道
HashTable,HashSet和Dictionary的区别
我有更好的答案
hastTable和hashMap的区别: (1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 (2)这个不同即是最重要的一点:Hashtable中的方法是同步的,而HashMap方法(在缺省情况下)是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m) 这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。 (3)只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的val...
其他类似问题
为您推荐:
hashtable的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁浅析Java中Map与HashMap,Hashtable,HashSet的区别
字体:[ ] 类型:转载 时间:
HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);HashSet则实现了Set接口,性质类似于集合
HashTable和HashMap区别
第一,继承的父类不同。Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。 代码如下:public class Hashtable&K,V&extends Dictionary&K,V&implements Map&K,V&, Cloneable, Serializable
public class HashMap&K,V&extends AbstractMap&K,V&implements Map&K,V&, Cloneable, Serializable第二,线程安全性不同。Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步,但使用HashMap时就必须要自己增加同步处理。
第三,是否提供contains方法HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。
Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。
第四,key和value是否允许null值。其中key和value都是对象,并且不能包含重复key,但可以包含重复的value。Hashtable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
第五,两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
第六,hash值不同。哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
第七,内部实现使用的数组初始化和扩容方式不同。Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。
HashMap中hash数组的默认大小是16,而且一定是2的指数。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 hashset hashtable 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信