java基础---->hashSet的简单分析(一)

  对于HashSet而言,它是基于HashMap实现的,底层采用HashMap来保存元素的。今天我们就简单的分析一下它的实现。

HashSet的简单分析

一、hashSet的成员变量组成

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
private transient HashMap<E,Object> map;

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();

hashSet的构造方法,是创建一个hashMap。

public HashSet() {
    map = new HashMap<>();
}

二、hashSet的一些操作也是基于上述创建的hashMap的

public Iterator<E> iterator() {
    return map.keySet().iterator();
}

public int size() {
    return map.size();
}

public boolean isEmpty() {
    return map.isEmpty();
}
public boolean contains(Object o) {
    return map.containsKey(o);
}

public boolean add(E e) {
    return map.put(e, PRESENT)==null; // PRESENT是hashSet的成员变量
}

public boolean remove(Object o) {
    return map.remove(o)==PRESENT; // PRESENT是hashSet的成员变量
}

public void clear() {
    map.clear();
}

友情链接

时间: 2024-12-24 15:59:52

java基础---->hashSet的简单分析(一)的相关文章

java基础----&gt;hashMap的简单分析(一)

HashMap是一种十分常用的数据结构对象,可以保存键值对.它在项目中用的比较多,今天我们就来学习一下关于它的知识. HashMap的简单使用 一.hashMap的put和get方法 Map<String, String> map = new HashMap<>(); map.put("username", "huhx"); map.put("password", "1234"); map.put(nu

Java基础——常用修饰符分析

在学习Java基础时会时不时用到一些修饰符,这些修饰符修饰的内容不一样,作用域也不一样,只有梳理清楚才能正确的使用它们. 不同修饰符修饰内容的作用域 public public公共的,表示该属性(或方法)公开,所有用户都可以直接进行调用. default缺省 default表示默认,不仅本类访问,而且是同包可见. private private私有的,表示该属性(方法)为只有本类内部可以访问(类内部可见).(想用private还要用set和get方法供其他方法调用,这样可以保证对属性的访问方式统

Java基础——HashMap源码分析

本篇介绍的HashMap综合了ArrayList和LinkedList这两个集合的优势,它的底层是基于哈希表实现的,如果不考虑哈希冲突的话,HashMap在增删改查操作上的时间复杂度都能够达到惊人的O(1). 对于HashMap类源码中开头注释翻译: HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同.)此类不保证映射的顺序,特别是它不保

java.util.HashSet源码分析

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable HashSet实现Set接口,内部维护一个HashMap实例变量.不保证顺序,允许null元素. 对于基本的操作,如add,remove,contains,size,只需要常量的时间复杂度. 不是线程安全的,如果在多线程环境下,需要被同步化,如调用方法Collections.s

java threadPool 线程池简单分析

java 1.5 concurrent 工具包中提供了五类线程池的创建: ExecutorService executor=Executors.newCachedThreadPool(); ExecutorService cacheExecutor=Executors.newCachedThreadPool(new TestThreadFactory()); ExecutorService fixExecutor=Executors.newFixedThreadPool(10); Executo

Java程序内存的简单分析

这篇文章将简单的说明下当我们运行Java程序时JVM(Java虚拟机)的内存分配情况. 首先我们先来感观的认识下几个名词: 1.栈,一般来说,基本数据类型直接在栈中分配空间,局部变量(在方法代码段中定义的变量)也在栈中直接分配空间,当局部变量所在方法执行完成之后该空间便立刻被JVM回收,还有一种是引用数据类型,即我们通常所说的需要用关键字new创建出来的对象所对应的引用也是在栈空间中,此时,JVM在栈空间中给对象引用分配了一个地址空间(相当于一个门牌号,通过这个门牌号就可以找到你家),在堆空间中

Java内存模型JMM简单分析

参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html    http://www.cnblogs.com/dolphin0520/p/3613043.html 一.Java内存区域的划分 由于Java程序是交给JVM执行的,所以我们在谈Java内存区域分析的时候事实上是指JVM内存区域划分. 根

Java基础(二)-static关键字分析

static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改变其(private.protected.default和public)作用域的范围): 修饰成员变量(非局部变量) 修饰成员方法 修饰代码块 修饰内部类 静态导包 怎么会有五种呢,大部分初学者对前面两种或者加上第三种还是很熟悉的,第四种情况可能一开始的人就比较少知道了,第五种就更少人知道了.下面一

Java基础(三)-final关键字分析

今天来谈谈final关键字的作用, 虽然有很多博文关于final进行了很深的研究,但还是要去记录下谈谈自己的见解加深下印象.下面直接进入主题: 一.final关键字的作用 1.被final修饰的类不能被继承. 这一点应该很多人都知道也遇到过,经典案例就是java.lang.String类 还有一些常见的类也是被final所修饰的,如下: 基本类型对应的包装类型(如java.lang.Integer.java.lang.Long等).字符相关类(java.lang.StringBuilder.ja