java容器(7)Set接口

本文详细介绍了Java中的Set接口及其特点,重点讲解了HashSet容器类的工作原理,包括哈希算法的简单介绍和在HashSet中的应用。通过示例代码展示了HashSet的添加、遍历操作,强调了其无序性和不重复性的特性。同时,分析了HashSet的存储机制,指出HashSet底层基于HashMap实现,利用数组和链表存储元素。最后,讨论了HashSet存储自定义对象时,重写hashCode()和equals()方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一:Set接口介绍

二:Set接口的特点

三:HashSet容器类

3.1哈希算法原理(简单介绍)

代码

四:HashSet的存储分析

无序

不重复

图解

 五:HashSet存储自定义对象


一:Set接口介绍

Set接口继承Collection接口,并没有添加新的方法

二:Set接口的特点

类似于数学中集合的概念

●无序,没有索引,只能通过遍历来查找元素

●没有重复的元素

Set接口常用的实现类有HashSet和TreeSet,常用的是HashSet

三:HashSet容器类

HashSet是一个没有重复元素的集合,不保证元素的顺序,并且里面的元素可以是null,HashSet是用hash算法实现的,底层实际上是用HashMap实现的,因此增删改的效率高

3.1哈希算法原理(简单介绍)

 将一些数据按照散列函数运算后存在数组里,这里不过多介绍,会在以后的博客中详细的解释Hash算法

代码

import java.util.HashSet;
import java.util.Set;

public class HashSetTest {
    public static void main(String[] args) {
        Set<String> set=new HashSet<>();
        //添加元素

        set.add("a");
        set.add("b1");
        set.add("c2");
        set.add("d");
        set.add("a");
        //获取元素
        System.out.println("----------获取元素----------");
        //由于HashSet没有顺序,即没有索引,所以不能用get(int index)来获取元素
        for(String str:set){//通过for each来获取,不依赖迭代因子i
            System.out.println(str);
        }



    }

}

 无序和没有重复元素就淋漓尽致的显现了出来 

四:HashSet的存储分析

HashSet是一个没有重复元素且无序的集合,线程是不安全的,且里面允许存放null

HashSet底层是用HashMap实现的,而HashMap底层使用数组和链表实现的,所以也可以说HashSet底层使用数组和链表实现的

无序

元素在数组(这个数组的默认长度为15)中存放的时候不是有序存放也不是随机存放的,而是通过对元素的哈希值进行运算来决定元素的位置

不重复

当两个元素的哈希值相等时,也就是在数组的同一个位置的时候,会调用元素的equals()方法来判断两个元素是否相同。如果元素相同则不会添加该元素,如果不相同,则会使用单向链表来保存该元素

图解

6 17 19 22 24 28 39

 五:HashSet存储自定义对象

剩下的都是generate自动生成的 

 两个相同数据的hashcode相同,说明在Users类中没有重写hashcoded()方法和equals()方法

 下面是重写后的

快捷键都可以自动生成 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值