Thinking in Java之Set接口、HashSet源码学习

Thinking in Java之Set接口、HashSet源码学习

ID:47318838

大小:37.50 KB

页数:4页

时间:2019-08-16

Thinking in Java之Set接口、HashSet源码学习_第1页
Thinking in Java之Set接口、HashSet源码学习_第2页
Thinking in Java之Set接口、HashSet源码学习_第3页
Thinking in Java之Set接口、HashSet源码学习_第4页
资源描述:

《Thinking in Java之Set接口、HashSet源码学习》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ThinkinginJava之Set接口、HashSet源码学习  文章主要讨论Set接口的设计、以及Set接口的一个实现类HashSet的设计细节。对于他们的思考,同样是基于源码学习的。  Set接口设计通过阅读API和源码我们可以知道Java中的Set和数学行直观的“集”的概念是相同的。Set的最大特点也就是不允许在其中放入重复的元素。Set集合最多只能包含一个null元素。至于这种特点是如何实现的,我们先不考究。在其具体子类HashSet里我们在讨论之。广州java培训咨询QQ:707552864,544627560  Set接口源码解析  首先

2、看看Set的源码吧。  [java]viewplaincopy  packagecom.kiritor;  /**  Set源码研究*/  importjava.util.Iterator;  publicinterfaceSetextendsCollection{  intsize();  booleanisEmpty();  booleancontains(Objecto);  Iteratoriterator();  Object[]toArray();  T[]toArray(T[]a);  booleanadd(Ee);  booleanre

3、move(Objecto);  booleancontainsAll(Collectionc);  booleanaddAll(Collectionc);  booleanretainAll(Collectionc);  booleanremoveAll(Collectionc);  voidclear();  booleanequals(Objecto);  inthashCode();  }  可以看出的是Set继承至Collection,而且通过对比还可以知道的是,Set提供的方法和Colllection指定的方法是完全一样的。那么它的不重复是如

4、何体现的呢?这里我们通过研究其具体实现类HashSet来说明。  HashSet类实现  同样的对于HashSet类的具体源码笔者就不贴出来了。这里我们只是简要的对其的方法做一些分析。首先看看HashSet类的头部吧。  对于序列化、Cloneable接口笔者就不细说了。这里HashSet继承AbstactSet这个中间抽象类,并且这个抽象类又继承至AbstractCollection。这里简要的说说自己的理解。在前一章对ArrayList的学习中,笔者并未就这方面给予解释。AbstractCollection其实更像是实现List,Set的共同的方法

5、,而AbstactSetAbstactList更像是提供给Set、List各自特有方法的实现。  1、底层实现  通过其源码的观察可以知道的是HashSet的底层实现是基于HashMap的。它不保证Set的迭代顺序而且不保证该顺序永久不变。HashSet的实现较为的简单,其相关的操作都是通过直接调用底层HashMap的相关方法来完成。  [java]viewplaincopy  //底层使用HashMap来保存HashSet中所有元素。  privatetransientHashMapmap;  //定义一个虚拟的Object对象作为HashMap的v

6、alue,将此对象定义为staticfinal。  privatestaticfinalObjectPRESENT=newObject();  2、构造方法  [java]viewplaincopy  *默认的无参构造器,构造一个空的HashSet。  *实际底层会初始化一个空的HashMap,并使用默认初始容量为16和加载因子0.75。  */  publicHashSet(){  map=newHashMap();  }  /**  *构造一个包含指定collection中的元素的新set。  *  *实际底层使用默认的加载因子0.75和足以包含指

7、定  *collection中所有元素的初始容量来创建一个HashMap。  *@paramc其中的元素将存放在此set中的collection。  */  publicHashSet(Collectionc){  map=newHashMap(Math.max((int)(c.size()/.75f)+1,16));  addAll(c);  }  /**  *以指定的initialCapacity和loadFactor构造一个空的HashSet。  *  *实际底层以相应的参数构造一个空的HashMap。  *@paraminitialCapaci

8、ty初始容量。  *@paramloadFactor加载因子。  */  publicHash

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。