HashSet底层解析(11)

本文详细介绍了HashSet的基本使用、底层实现及面试题解析。HashSet作为SET接口的实现类,基于HashMap实现,特点是无序且不可重复。文章通过源码分析揭示了HashSet与HashMap的关系,并讨论了相关面试问题。
摘要由CSDN通过智能技术生成

目录

前言

一、HashSet基本使用。

1、1 什么是HashSet。

1、2 HashSet常用方法。

二、HashSet底层探索。

2、1 HashSet源码查看。

三、HashSet常见面试题。

四、总结 。


前言

通过本篇文章你将学到:

1、什么是HashSet。

2、HashSet常用方法。

3、HashSet底层实现。

4、HashSet常见面试题。

 "你听那秋末的落叶,你听那叹息的离别...",这首歌今天在我脑海中一直回荡。明明是春天,心里却些许惆怅!明明在城市,却感受不到繁华。时常在想,外面的世界如此广阔为何没有我栖身之所。方寸之地,一张床,一台电脑,一个人。放得下人,但安不下心。有向往的地方,却没"心之所向,素履以往"的勇气!


 

一、HashSet基本使用。

1、1 什么是HashSet。

示意图:

HashSet是:SET接口下的一个实现类。具有SET接口的特点,无序不可重复

1、2 HashSet常用方法。

测试代码:

public static void main(String[]args){
        Set set = new HashSet();
        set.add("帅");
        set.add("哥");
        set.add("威");
        Object [] str =set.toArray();
        // SET中没有get方法。第一 :SET没有 顺序,第二,你get object没意义。
        // size()方法获取当前SET大小
        System.out.println("size()方法获取当前SET大小"+set.size());
        // 测试contains()方法:是否包含目标元素
        System.out.println("测试contains()方法:是否包含目标元素"+set.contains("帅"));
        // 测试toArray()方法;
        System.out.println("测试toArray()方法"+str.toString());
        // 测试iterator()方法
        Iterator iterator =set.iterator();
        while(iterator.hasNext()){
            System.out.print( iterator.next());
        }
        // 测试remove()方法
        System.out.println(set.remove("哥"));
}

测试结果:


二、HashSet底层探索。

2、1 HashSet源码查看。

我们从HashSet的构造方法开始讲。

按住Ctrl点击HashSet()即可进入HashSet的无参构造函数。

然后你发现一个“惊天大秘密”

这个时候请划重点:HashSet底层就是一个HashMap

然后我们接着看。

下一个看add()方法。

其他方法 size(),isEmpty(),contains()

通过这几个方法我们基本可以确定HashSet就是一个HashMap只不过他的Value全部都相等。因此其他方法我就不说了!


三、HashSet常见面试题。

1、HashSet的底层是怎么实现的?

答:HashSet底层实际上就是一个HashMap,创建的时候其实创建的就是一个HashMap!只不过该HashMap的value都是HashSet中自定义的一个Object对象,然后HashMap的Key就是HashSet。另外,HashSet中的很多方法都是直接用的HashMap中的各种方法。比如:add(),size(),isEmpty(),等等...

2、HashSet的特点是什么?

答:1、由HashSet底层实际上是HashMap的Key值我们可以知道,HashSet存储的元素是不能够重复的。因为,HashMap的Key不允许重复。

2、HashSet存储元素是无序的,因为HashMap存储Key的是时候是通过Hascode进行了散列算法进行的存储,所以他是无序的。随机在内存中存储的!

3、关于HashMap的问题。

答:实际上HashSet并不能问什么,因为他就是一个HashMap,因此面试官特别喜欢将HashSet问道HashMap中去。HashMap中有非常多的好问的问题关于HashMap可以看我这篇博客HasHMap的底层实现


四、总结 。

HashSet就是一个HashMap。

学习完HashMap后还是非常开心的学习HashSet,而且是非常快!只要HashMap学的好其他都好说,HashMap在JDK1.8后用Node+红黑树进行了实现,需要重点掌握!这个是数据结构以及算法的共同的考核。

最近有点糟心,有股怨气却无处可发!今年,我给自己的目标是成熟,但是好难啊!

“我还是从前那个少年,没有一丝丝改变!”

不行,我要正能量,我要打鸡血,我要喝心灵鸡汤!

开玩笑,我怎么可能丧?

接下来,我将继续前行~下一篇是关于泛型的文章,想了解的请持续关注我!!! 

我是帅哥威!一个即将拥有9块腹肌的程序猿。不给我点个👍吗?码字挺辛苦的!

其他博客链接:

1、HasHMap的底层实现

2、ArrayList底层实现

3、LinkList的底层实现

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值