Thinking in Java 之 Set接口、 HashSet源码学习
文章主要讨论 Set 接口的设计、以及 Set 接口的一个实现类 HashSet的设计
细节。对于他们的思考,同样是基于源码学习的。
Set接口设计
通过阅读 API 和源码我们可以知道 Java 中的 Set 和数学行直观的“集”的
概念是相同的。 Set 的最大特点也就是不允许在其中放入重复的元素。 Set 集合
最多只能包含一个 null 元素。至于这种特点是如何实现的,我们先不考究。在
其具体子类 HashSet 里我们在讨论之。广州 java 培训咨询 QQ:707552864,
544627560
Set接口源码解析
首先看看 Set的源码吧。
[java] view plaincopy
package com.kiritor;
/**
Set源码研究 */
import java.util.Iterator;
public interface Set extends Collection {
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator iterator();
Object[] toArray();
T[] toArray(T[] a);
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection c);
boolean addAll(Collection c);
boolean retainAll(Collection c);
boolean removeAll(Collection c);
void clear();
boolean equals(Object o);
int hashCode();
}
可以看出的是 Set继承至 Collection,而且通过对比还可以知道的是, Set提
供的方法和 Colllection 指定的方法是完全一样的。 那么它的不重复是如何体现的
呢?这里我们通过研究其具体实现类 HashSet来说明。
HashSet类实现
同样的对于 HashSet类的具体源码笔者就不贴出来了。 这里我们只是简要的
对其的方法做一些分析。首先看看 HashSet类的头部吧。
对于序列化、 Cloneable接口笔者就不细说了。这里 HashSet继承 AbstactSet
这个中间抽象类, 并且这个抽象类又继承至 AbstractCollection。这里简要的说说