码迷,mamicode.com
首页 > 编程语言 > 详细

Java HashSet工作原理及实现

时间:2018-10-02 17:13:06      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:数学   bool   actually   nbsp   color   add   ash   obj   分享图片   

1. 概述

This class implements the Set interface, backed by a hash table (actually a HashMap instance). 
It makes no guarantees as to the iteration order of the set; in particular, 
it does not guarantee that the order will remain constant over time. 
This class permits the null element.This class implements the Set interface, backed by a hash table (actually a HashMap instance). 
It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. 
This class permits the null element.

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

HashSet<String> set = new HashSet<String>();
set.add("语文");
set.add("数学");
set.add("英语");
set.add("历史");
set.add("政治");
set.add("地理");
set.add("生物");
set.add("化学");

其大致的结构是这样的:

技术分享图片

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

map是整个HashSet的核心,而PRESENT则是用来造一个假的value来用的。Map有键和值,HashSet相当于只有键,值都是相同的固定值,即PRESENT。

 2. 基本操作

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
    return map.remove(o)==PRESENT;
}
public boolean contains(Object o) {
    return map.containsKey(o);
}
public int size() {
    return map.size();
}

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

 Refer:

http://yikun.github.io/2015/04/08/Java-HashSet%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/

Java HashSet工作原理及实现

标签:数学   bool   actually   nbsp   color   add   ash   obj   分享图片   

原文地址:https://www.cnblogs.com/winner-0715/p/9736812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!