HashSet集合是如何保证元素的唯一性的?

HashSet集合的特点是元素无序和不重复 。

首先,HashSet的底层数据结构是哈希表。哈希表就是存储一系列哈希值的表,而哈希值是由对象的hashCode()方法生成的。

确保元素唯一性的两个方法,hashCode()和equals()方法。

当调用add()方法向集合中存入对象的时候,先比较此对象与原有对象的哈希值有没有一样的,如果都不一样就直接存入;如果有与之相同的哈希值,则要继续比较这两个对象是否为同一个对象,此时就要调用对象的equals()方法了。

总之,只有HashCode的至相同时,才会调用equals()方法。

在判断元素是否存在和删除一个元素的时候,也是这个过程。

时间: 2024-12-13 17:48:15

HashSet集合是如何保证元素的唯一性的?的相关文章

解说HashSet如何保证元素的唯一性

HashSet底层数据结构是哈希表,哈希表按哈希值来存储,HashSet集合中有若干个存储区域,而每个对象可以计算出一个hash值,系统会自动将这个值分组,对应若干个存储区域.当添加新元素时,系统会计算出这个元素的hash值,然后跟存储区域的每一个元素进行比较,如果不相同则添加该新元素.如果相同再equals比较,若为false,则添加该元素. 简单说就是同过元素的两个方法,hashcode()和equals()来完成,如果元素的hashCode值相同,再判断equals是否为true,若为tr

Java基础知识强化之集合框架笔记47:Set集合之TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序)

1. TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序) (1)Student.java: 1 package cn.itcast_07; 2 3 public class Student { 4 private String name; 5 private int age; 6 7 public Student() { 8 super(); 9 } 10 11 public Student(String name, int age) { 12 super(); 13 thi

Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解

1. TreeSet保证元素唯一性和自然排序的原理和图解

HashSet如何保证元素的唯一性-跟踪源码解析

自己的理解:HashSet的底层数据结构用的是哈希表(HashMap),当往HashSet上添加一条元素时. public boolean add(E e) { return map.put(e, PRESENT)==null;//PRESENT是一个一样的Object对象,调用HashMap的put方法 } 点进put方法如下: public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold);

HashSet保证元素唯一性的代码体现(源码和内部图 进行解析)

--------------------------------------------------------------- 测试类: /* * 需求:存储自定义对象,并保证元素的唯一性 * 要求:如果两个对象的成员变量值都相同,则为同一个元素. *  * 目前是不符合我的要求的:因为我们知道HashSet底层依赖的是hashCode()和equals()方法. * 而这两个方法我们在学生类中没有重写,所以,默认使用的是Object类. * 这个时候,他们的哈希值是不会一样的,根本就不会进行后

HashSet集合

1.HashSet Set集合,无索引,不可以重复,无序 在使用 list 集合时,add方法返回的永远时true,有序,有索引 在使用 Set 集合时,add方法再添加重复元素时,返回的false,无序,无索引 1 HashSet<String> hashSet = new HashSet<>(); 2 hashSet.add("t"); 3 hashSet.add("a"); 4 hashSet.add("b"); 5

java 17 - 4 HashCode()保证元素唯一性的代码体现以及图解

当我们想要创建一个集合,该集合里面的元素都具有唯一性时.会遇到两种情况: A:元素为String类型,可以直接用Hashset<String>集合来创建 String类重写了hashCode()和equals()方法,所以,它就可以把内容相同的字符串去掉.只留下一个. B:当元素为自定义对象的时候,那么,就要在这个对象的类中重写hashCode()和equals()方法 下图是思路: 其实,扯了这么多,上面那些只要理解思路就行了...这玩意不用自己写 在类上面 Alt+Shift+s ,再点h

set集合可以添加重复元素

set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素, 但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同 public static void main(String[] args) { Set<Person> set = new HashSet<Person>(); Person p1 = new Person("p1",123); Person p2 = new Pe

Java学习(set接口、HashSet集合)

一.set接口 概念:set接口继承自Collection接口,与List接口不同的是,set接口所储存的元素是不重复的. 二.HashSet集合 概念:是set接口的实现类,由哈希表支持(实际上是一个HashMap集合).HashSet集合元素的提取顺序与存储顺序不相同. 采用哈希表数据结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 2.1哈希表 什么是哈希表? 链表与数组的组合. 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时