淘宝网站怎么建设,企业网站标签页是什么,网站建设 服务流程,深圳网站设计公司怎么做哈希表存放的是哈希值#xff0c; HashSet 存储元素的顺序并不是按照存入时的顺序#xff08;和 List 显然不同#xff09; 而是按照哈希值来存的所以取数据也是按照哈希值取得。 #xff5e; 本篇内容包括#xff1a;HashSet 概述、HashSet 与 HashMap 的关系以及HashSet… 哈希表存放的是哈希值 HashSet 存储元素的顺序并不是按照存入时的顺序和 List 显然不同 而是按照哈希值来存的所以取数据也是按照哈希值取得。 本篇内容包括HashSet 概述、HashSet 与 HashMap 的关系以及HashSet 的使用 文章目录一、HashSet 概述二、HashSet 与 HashMap三、HashSet 的使用1、构造方法2、常用方法一、HashSet 概述
哈希表存放的是哈希值 HashSet 存储元素的顺序并不是按照存入时的顺序和 List 显然不同 而是按照哈希值来存的所以取数据也是按照哈希值取得。元素的哈希值是通过元素的 hashcode 方法来获取的, HashSet 首先判断两个元素的哈希值如果哈希值一样接着会比较 equals 方法 如果 equls 结果为 true HashSet 就视为同一个元素。如果 equals 为 false 就不是同一个元素。哈希值相同 equals 为 false 的元素是怎么存储呢就是在同样的哈希值下顺延可以认为哈希值相同的元素放在一个哈希桶中。也就是哈希一样的存一列。
HashSet 通过 hashCode 值来确定元素在内存中的位置。一个 hashCode 位置上可以存放多个元素。
HashSet 的底层源码特别少主要是因为 HashSet 的方法基本都是借助 HashMap 的方法来实现的。 HashSet 存储的元素对应 HashMap 的 key因为 HashMap 不能存储重复的 key所以 HashSet 不能存放重复元素由于 HashMap 的 key 是基于 hashCode 存储对象的所以 HashSet 中存放的对象也是无序的HashSet 也没有提供 get 方法可以通过 Iterator 迭代器获取数据。 二、HashSet 与 HashMap
HashSet 是基于 HashMap 实现的区别就在于在 HashMap 中输入一个键值对而在 HashSet 中只输入一个值。
Java代码
private transient HashMap map;// Constructor - 1
// All the constructors are internally creating HashMap Object.
public HashSet()
{// Creating internally backing HashMap objectmap new HashMap();
}// Constructor - 2
public HashSet(int initialCapacity)
{// Creating internally backing HashMap objectmap new HashMap(initialCapacity);
}// Dummy value to associate with an Object in Map
private static final Object PRESENT new Object();而 HashSet 类的 add 方法的实现是这样子的很明显可以看到是调用了 HashMap 里的 put() 方法。而里面的 present 则是常量就是没用的。
public boolean add(E e)
{ return map.put(e, PRESENT) null;
}三、HashSet 的使用
1、构造方法
HashSet 提供了五种方式的构造器其中 4 种是 public 修饰的
方法名方法说明方法名方法说明public HashSet()无参构造方法完成 map 的创建public HashSet(int initialCapacity)指定初始化大小public HashSet(int initialCapacity, float loadFactor)指定初始化大小和负载因子public HashSet(Collection)定集合转化为 HashSet, 完成 map 的创建HashSet(int initialCapacity, float loadFactor, boolean dummy)指定初始化大小和负载因子dummy 无实际意义
2、常用方法
方法名方法说明方法名方法说明boolean add(E e)添加一个元素如果该元素已经存在则返回true如果不存在则返回falseboolean remove(Object o)删除指定的元素删除成功返回trueIteratorE iterator()获取hashSet的迭代器int size()获得大小