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。