java容器之Set接口
2014-04-02 10:06
288 查看
HashSet
简单介绍:
HashSet类是基于HashMap实现的,它利用定义HashMap<E,object>成员来存储数据,同时定义一个finalstatic Object PRESENT 来与每一个E配对;
接下来看下源代码:
类的成员:
构造函数:(仅显示一个哈)
添加元素:(如果已经存在该元素了,那么返回false)
删除元素:
在已经熟悉HashMap的情况下,HashSet还是相当好理解的;
linkedHashSet
简单介绍:
具有可预知迭代顺序的Set 接口的哈希表和链接列表实现。它是基于LinkedHashMap实现的;同时,如果插入已有的元素,不会改变原先有的插入顺序;
看下LinkedHashSet类,如下
发现它是继承HashSet的,那么为什么说他是基于LinkedHashMap实现的而不是HashMap呢?
那是因为在HashSet中有一个受保护的构造器,如下所示:
对于LinkedHashSet类,我们不提供新的方法,但是提供了4中构造方法,它们都是super()上方这个构造器的,我们取其中一个说明:
TreeSet
简单介绍:
TreeSet与HashSet比较类似,都是基于Map实现的,只不过TreeSet是基于TreeMap实现的,它利用定义NavigableMap<E,Object>(这是TreeMap的父类)成员对象来存储数据,同时定义一个final static Object PRESENT 来与每一个E配对;
简单介绍:
HashSet类是基于HashMap实现的,它利用定义HashMap<E,object>成员来存储数据,同时定义一个finalstatic Object PRESENT 来与每一个E配对;
接下来看下源代码:
类的成员:
private transient HashMap<E,Object> map; private static final Object PRESENT = new Object();
构造函数:(仅显示一个哈)
public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); }
添加元素:(如果已经存在该元素了,那么返回false)
public boolean add(E e) { return map.put(e, PRESENT)==null; }
删除元素:
public boolean remove(Object o) { return map.remove(o)==PRESENT; }
在已经熟悉HashMap的情况下,HashSet还是相当好理解的;
linkedHashSet
简单介绍:
具有可预知迭代顺序的Set 接口的哈希表和链接列表实现。它是基于LinkedHashMap实现的;同时,如果插入已有的元素,不会改变原先有的插入顺序;
看下LinkedHashSet类,如下
public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
发现它是继承HashSet的,那么为什么说他是基于LinkedHashMap实现的而不是HashMap呢?
那是因为在HashSet中有一个受保护的构造器,如下所示:
HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
对于LinkedHashSet类,我们不提供新的方法,但是提供了4中构造方法,它们都是super()上方这个构造器的,我们取其中一个说明:
public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true); }
TreeSet
简单介绍:
TreeSet与HashSet比较类似,都是基于Map实现的,只不过TreeSet是基于TreeMap实现的,它利用定义NavigableMap<E,Object>(这是TreeMap的父类)成员对象来存储数据,同时定义一个final static Object PRESENT 来与每一个E配对;
添加数据: public boolean add(E e) { return m.put(e, PRESENT)==null; } 移除数据: public boolean remove(Object o) { return m.remove(o)==PRESENT; }这个真没什么好讲的,关键是熟悉TreeMap的实现原理哈。。。
相关文章推荐
- Java enum的用法详解
- Java VM 参数描述
- eclipse的虚拟内存、物理内存的设置疑惑
- SSH旅程(六)Spring和struts结合(方案一)
- Java生成验证码
- 解决org.openqa.selenium.WebDriverException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms org.springframework.beans.BeanInstantiation
- 转:成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
- java中number & 0xff什么解释? 0xff是指255,关键是&是怎么计算的?
- java 报表 可以直接打开,或下载
- java学习笔记九——接口
- Struts2-OGNL表达式
- java中静态的代码块,静态变量,静态方法
- Failed to load JavaHL Library.
- java学习笔记八——关键字
- java学习笔记七——类
- 使用struts的同步令牌避免form的重复提交
- java程序执行过程
- Eclipse&nbsp;修改程序名
- Sring MVC 环境下的Shiro集成测试
- 如何设置myeclipse jsp文件的默认打开方式