JDK的Set源码分析(jdk,set,编程语言)

时间:2024-05-07 01:50:27 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    JDK%E7%9A%84Set%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90

首先,我们看一下HashSet

privatetransientHashMap<E,Object>map;


//DummyvaluetoassociatewithanObjectinthebackingMap

privatestaticfinalObjectPRESENT=newObject();

可见,他适配了HashMap,那么他的功能是如何委托给HashMap结构的呢?

publicbooleanadd(Ee){

returnmap.put(e,PRESENT)==null;

}

在hashMap中,我们大多数时候是用value,但是在set的时候,却很好的利用了已有类HashMap,他利用了HashMap的key的唯一性来保证存储在Set中的元素的唯一性;

privatestaticfinalObjectPRESENT=newObject();

是这个HashMap所有key的value,他只是一个形式,而我们真正的数据是存在在key中的资源;

我们最后拿到的迭代器也是:

publicIterator<E>iterator(){

returnmap.keySet().iterator();

}


map的keySet的迭代器;

同理,我们看看LinkedhashMap;

publicLinkedHashSet(intinitialCapacity,floatloadFactor){

super(initialCapacity,loadFactor,true);

}


/**

*Constructsanew,emptylinkedhashsetwiththespecifiedinitial

*capacityandthedefaultloadfactor(0.75).

*

*@paraminitialCapacitytheinitialcapacityoftheLinkedHashSet

*@throwsIllegalArgumentExceptioniftheinitialcapacityisless

*thanzero

*/

publicLinkedHashSet(intinitialCapacity){

super(initialCapacity,.75f,true);

}


/**

*Constructsanew,emptylinkedhashsetwiththedefaultinitial

*capacity(16)andloadfactor(0.75).

*/

publicLinkedHashSet(){

super(16,.75f,true);

}

调用了父类的构造函数;构造函数如下:

HashSet(intinitialCapacity,floatloadFactor,booleandummy){

map=newLinkedHashMap<E,Object>(initialCapacity,loadFactor);

}

生出了LinkedHashMap;

同理,我们一样可见到treeMap的实现:

privatetransientNavigableMap<E,Object>m;


//DummyvaluetoassociatewithanObjectinthebackingMap

privatestaticfinalObjectPRESENT=newObject();

本文:JDK的Set源码分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JDK中Collections的线程安全怎么实现下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18