java.util.HashSet源码解析
来源:互联网 发布:魔兽世界1.12数据库 编辑:程序博客网 时间:2024/05/17 01:35
1.java集合框架图
2.所属包
package java.util;
3.继承与实现关系
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
4.准备工作
类HashSet实际上是操作一个HashMap的实例,不保证集合的迭代顺序,也不保证该顺序恒久不变,该类允许使用null元素。建议先看HashMap的源码解析 : java集合之HashMap源码解析
5.属性
//由哈希表(实际上是一个 HashMap 实例)支持。 private transient HashMap<E,Object> map; /*由于HashSet是对单值操作,而HashMap采用的是键值对的形式,由于HashSet的元素值作为了HashMap的键,那么对应的值就都是PRESENT。 *满足HashMap结构*/ private static final Object PRESENT = new Object();
6.构造方法
/** 构造方法1: * 构造一个初始化容量为16,加载因子为0.75的HashMap */ public HashSet() { map = new HashMap<>(); }
/** 构造方法2: * 采用HashMap的集合参数为构造方法的参数的方式 */ public HashSet(Collection<? extends E> c) { map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); }public boolean addAll(Collection<? extends E> c) { boolean modified = false; for (E e : c) if (add(e)) modified = true; return modified; }
/** 构造方法3: * 输入一个初始化容量和加载因子的构造方法HashMap */ public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); }
/** 构造方法4: * 输入初始化容量的构造方法HashMap */ public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); }
7.方法
add方法:
/** * 采用HashMap的put方法,如果添加的元素已经存在于HashMap中,那么就返回true,否则返回false */ public boolean add(E e) { return map.put(e, PRESENT)==null; }
remove方法:
/** * 采用HashMap中的remove方法,在HashMap中删除键对应的值就返回对应的Entry元素的值,将值与存入的PRESENT值比较。 * 如果值相同就删除成功,否则失败 */ public boolean remove(Object o) { return map.remove(o)==PRESENT; }
-----------------------------该源码为jdk1.7版本的
阅读全文
0 0
- java.util.HashSet源码解析
- Java HashSet源码解析
- java.util.hashSet的源码剖析
- java.util.logging源码解析
- java.util.ArrayList源码解析
- java.util.LinkedList源码解析
- java.util.Vector源码解析
- java.util.Stack源码解析
- java.util.HashMap源码解析
- java.util.Hashtable源码解析
- java.util.LinkedHashMap源码解析
- java.util.ArrayDeque源码解析
- java.util.TreeMap源码解析
- java.util.ArrayList源码解析
- java.util包---HashSet
- Java源码HashMap与HashSet解析
- 【jdk源码解析四】java.uti.HashSet源码解析
- Java集合源码解析(五)HashSet源码解析
- 线程等待和启动相关
- kotlin基础
- Mac OS 权限问题SIP
- 根据微信公众号文章链接展示此公众号二维码
- Eclipse项目发布到Tomcat下被加载两次
- java.util.HashSet源码解析
- 【备忘】达内2017Java全套最新价值2万元视频教程
- jquery 获取复选框选中的值得办法
- live555 RTP打包与发送
- Android 自定义View (三) 圆环交替 等待效果
- Eventbus知识总结一
- 学生党的思维导图
- bzoj2754:[SCOI2012]喵星球上的点名 (后缀数组+离线+树状数组)
- -all_load和-force_load 的区别