Java HashSet工作原理及实现

1. 概述

HashSet是基于HashMap来实现的,操作很简单,更像是对HashMap做了一次“封装”,而且只使用了HashMap的key来实现各种特性,我们先来感性的认识一下这个结构:

1 HashSet<String> set = new HashSet<String>();
2 set.add("语文");
3 set.add("数学");
4 set.add("英语");
5 set.add("历史");
6 set.add("政治");
7 set.add("地理");
8 set.add("生物");
9 set.add("化学");

其大致的结构是这样的:

1 private transient HashMap<E,Object> map;
2 // Dummy value to associate with an Object in the backing Map
3 private static final Object PRESENT = new Object();

map是整个HashSet的核心,而PRESENT则是用来造一个假的value来用的。

 

2. 基本操作

 1 public boolean add(E e) {
 2     return map.put(e, PRESENT)==null;
 3 }
 4  
 5 public boolean remove(Object o) {
 6     return map.remove(o)==PRESENT;
 7 }
 8  
 9 public boolean contains(Object o) {
10     return map.containsKey(o);
11 }
12  
13 public int size() {
14     return map.size();
15 }

基本操作也非常简单,就是调用HashMap的相关方法,其中value就是之前那个dummy的Object。

 

posted @ 2017-04-06 14:36  乱码出黑客  阅读(348)  评论(0编辑  收藏  举报