您的位置:首页 > 编程语言

HashSet源代码剖析

2013-12-19 10:13 190 查看
今天来看看HashSet的源代码。



从图片可以看到HashSet是AbstractSet的子类。实现了Set,Cloneable和Serializable接口。说明HashSet是可以序列话和可以克隆的。



看到这两个成员变量其实你就已经明白了HashSet为什么叫HashSet,和猜到HashSet中的方法的实现。

HashSet底层维护着一个HashMap对象。在new出HashSet的时候,将这个map对象初始化。HashSet的构造方法跟HashMap也差不多,也是有四个。其实底层也是调用HashMap的构造方法。下面的代码可以充分说这一点。



包括里面的add方法,clear方法,remove方法其实都是调用HashMap的put方法,clear方法和remove方法。

可能会有个疑问。HashMap是key-value对,HashSet只有value。底层代码怎么通用啊!!其实很简单。上面第二章图片中有private static final Object PRESENT = new Object();这段代码,当你调用HashSet.add(value);方法时,其实是调用HashSet.map.put(value,PRESENT );把你add的值当做底层维护的map对象的key,PRESENT 当做是map的value,放到map中。所以HashSet的add方法add的值是不会重复的,因为是调用HashMap.put(key,
value)方法,而HashMap.put方法的key是不会重复的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: