【Java寒假打卡】Java基础-集合HashSet

news2025/1/20 19:26:00

【Java寒假打卡】Java基础-集合Set

    • 概述
    • 哈希值
    • hashSet原理
    • HashSet存储学生对象并遍历
    • 小结

概述

  • 底层数据结构是哈希表
  • 不能保证存储和去除的顺序完全一致
  • 没有带索引的方法,所以不能使用普通的for循环进行遍历 使用增强for循环或者迭代器进行遍历
  • 由于是Set集合,所以元素唯一

简单使用:

package com.hfut.edu.test7;
import java.util.HashSet;
import java.util.Iterator;

public class test1 {
    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<>();

        // HashSet是集合 每一个元素只能存在一个  并且存入顺序和读取顺序是不一致的
        hs.add("hrfiuweshrfiuv");
        hs.add("hrfiuweswqhrfiuv");
        hs.add("hrfiuwewqshrfiuv");
        hs.add("hrfiuweshwqrfiuv");
        hs.add("hrfiuwewqshrfiuv");
        hs.add("q");
        hs.add("q");

        // 使用迭代器进行遍历
        Iterator<String> it = hs.iterator();

        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("=============================================");
        // 使用增强for循环进行遍历
        for(String i:hs){
            System.out.println(i);
        }
    }
}


哈希值

在这里插入图片描述

hashSet原理

在这里插入图片描述

HashSet1.7版本原理总结:

  • 底层数据结构:哈希表(数组 + 链表)
  • 数组的长度默认为16,加载因子是0.75(数组扩容)
  • 首先会先获取元素的哈希值,计算出数组中应该存入的索引
    • 判断该索引处是否为null
    • 如果是null,直接添加
    • 如果不是null,则与链表中所有元素,通过equals方法比较属性值
    • 只要有一个相同,就不存,如果都不一样,才会存入集合

HashSet存储学生对象并遍历

在这里插入图片描述

  • Student学生类
package com.hfut.edu.test8;

import java.util.Objects;

public class Student {
    private int age;
    private String name;

    public Student() {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        return Objects.equals(name, student.name);
    }

    // 根据属性值 计算哈希值
    @Override
    public int hashCode() {
        int result = age;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}


package com.hfut.edu.test8;

import java.util.HashSet;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {

        HashSet<Student> hs = new HashSet<>();

        // s1和s2理论上是不同的对象 但是由于年龄和姓名都是一样的  所以不应该存入HashSet中
        // 但是如果没有重写hashCode方法 那就是根据对象的地址值计算的哈希值  这个哈希值是不一样的  那么计算出来应该存入的索引就不一样
        Student s1 = new Student(11,"12");
        Student s2 = new Student(11,"12");
        Student s3 = new Student(111,"12");
        hs.add(s1);
        hs.add(s2);
        hs.add(s3);
        Iterator<Student> it = hs.iterator();

        while(it.hasNext()){
            Student s = it.next();
            System.out.println(s);// 调用toString方法进行打印
        }


    }
}


小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广告业务系统 之 承前启后 —— “消息中心”

文章目录广告业务系统 之 承前启后 —— “消息中心”消息中心物料同步链路图模块设计之 “一分为二”模块交互图之 “强一致性设计”奇怪交互图的数据链路数据一致性问题日志中心广告业务系统 之 承前启后 —— “消息中心” 消息中心 消息中心&#xff0c;是为 投放引擎 做…

韩顺平老师的Linux基础学习笔记 (上)

Linux学习笔记 前言&#xff1a;本系列笔记的参考由 2021韩顺平 一周学会Linux 总结而成&#xff0c;希望能给学习Linux的同学一些帮助。也感谢韩老师录制的视频给我带来了非常巨大的收获&#xff01; 目录&#xff1a; 韩顺平老师的Linux基础学习笔记 (上)韩顺平老师的Linu…

交通部互通互联二维码之发卡机构公钥证书

背景 随话说的好啊&#xff0c;好比不如烂笔头&#xff0c;之前开发联调OK后&#xff0c;闲置了半年&#xff0c;结果今天再去搞公钥&#xff0c;发现完全忘记了生成规则。审核 有病 哪里来的广告&#xff1f; 特此&#xff0c;记录一下我们的过程&#xff0c;以便后面再出现…

gitee的ssh配置

#1.配置自己的gitee郵箱&#xff0c;返回直接輸入郵箱 ssh-keygen -t rsa -C "郵箱" #2.複製郵箱的ssh秘鑰 cat ~/.ssh/id_rsa.pub #在個人配置添加自己的ssh秘鑰

【jQuery】常用API——jQuery样式

jQuery 给我们封装了很多动画效果&#xff0c;最为常见的如下&#xff1a;一、显示隐藏切换效果1. 显示语法规范 show([speed,[easing],[fn]]);显示参数&#xff1a;&#xff08;1&#xff09;参数都可以省略&#xff0c; 无动画直接显示。&#xff08;2&#xff09;speed&…

(十五)一篇文章搞懂Java的内部类

目录 1.概述: 2.内部类之一:静态内部类 3.内部类之二:成员内部类 4.内部类之三:局部内部类 5.内部类之四:匿名内部类 1.概述: 内部类就是定义在一个类里面的类&#xff0c;里面的类可以理解成(寄生)。 2.内部类的使用场景、作用&#xff1a; ①当一个事务的内部&#xff0c;还…

前端如何上传图片文件

效果图html代码js效果图 效果&#xff1a; 这篇博客必须要后台调用你的js函数&#xff0c;如果后台不打算调用你的js函数可以放弃此篇博客了&#xff0c;或者自己将代码改良。如果后台接受该代码可以参考这篇文章&#xff1a;&#xff08;如果后台不是使用php,也没关系只要返…

.net工作流引擎ccflow集成并增加自定义功能

一、为什么需要自定义扩展1、第三方类库已满足大部分需求&#xff0c;剩下的根据具体业务需求抽象成公共功能进行扩展2、第三方呈现的web页面与原类库耦合度较高&#xff0c;希望在原页面上扩展而不影响原来的功能3、在完全不修改第三方类库及web页面的情况下&#xff0c;加入自…

【数据结构】堆

堆 堆的定义 &#xff08;最大&#xff09;堆是一个可以被看成一棵树的数组对象&#xff0c;满足如下性质: 堆中的父亲结点总大于或等于其左右孩子结点的值总是一棵完全二叉树 完全二叉树 若设二叉树的深度为h&#xff0c;除第 h 层外&#xff0c;其它各层 (1~h-1) 的结点…

1.1.1半导体基础知识

半导体基础知识 上学的时候大概是模电第一节就会讲完这&#xff0c;会详细的介绍什么是导体&#xff0c;绝缘体&#xff0c;半导体&#xff0c;本征半导体&#xff0c;然后接着详细的讲述本征半导体的结构&#xff0c;两种载流子&#xff0c;P,N杂质半导体&#xff0c;PN结以及…

Spring Boot自动配置--如何切换内置Web服务器

系列文章目录 Spring Boot[概述、功能、快速入门]_心态还需努力呀的博客-CSDN博客 Spring Boot读取配置文件内容的三种方式_心态还需努力呀的博客-CSDN博客 Spring Boot整合Junit_心态还需努力呀的博客-CSDN博客 该系列文章持续更新中~ 目录 系列文章目录 前言 一、默认…

【Python】python深拷贝和浅拷贝(二)

【Python】python深拷贝和浅拷贝&#xff08;二&#xff09; 前言 上一期我们介绍了Python中深拷贝和浅拷贝的定义以及它们在执行过程中内存结构&#xff0c;同时也给出了深拷贝和浅拷贝的方法。&#xff08;没有看上一期的朋友看这里&#xff0c;python深拷贝和浅拷贝&#…

架构设计---性能设计的详解

前言&#xff1a; 系统性能是互联网应用最核心的非功能性架构目标&#xff0c;系统因为高并发访问引起的首要问题就是性能的问题&#xff0c;高并发访问的情况下&#xff0c;系统因为资源不足&#xff0c;处理每个请求的时间都会变慢&#xff0c;看起来就是性能的变差。 因此…

什么是随机森林?

什么是随机森林&#xff1f; 随机森林是一种有监督的机器学习算法。由于其准确性&#xff0c;简单性和灵活性&#xff0c;它已成为最常用的一种算法。事实上&#xff0c;它可以用于分类和回归任务&#xff0c;再加上其非线性特性&#xff0c;使其能够高度适应各种数据和情况。 …

JavaSE初阶篇:系统环境变量path|classpath|JAVA_HOME

环境变量是为了 “在命令行窗口下”编译和运行Java程序而配置一、系统变量&#xff1a;Pathpath环境变量作用&#xff1a;将命令所在的路径配置到path中去&#xff0c;就相当于在计算机中“注册”了一样&#xff0c;以后找这个命令&#xff0c;会直接去你配置的路径下寻找。达到…

Revit中怎么使两面墙拉近时不自动连接?柱断梁墙功能

一、Revit中怎么使两面墙拉近时不自动连接? 问题&#xff1a;同材质的墙体在同一条直线上只要将其端点拖拽至一起就会融合成一道整墙体(如图-1、2所示)&#xff0c;但是在做一些较特殊的结构时我们不需要其连接成一道整墙&#xff0c;有没有什么办法能够设置呢? 我们可以通过…

避免Mysql插入重复数据的几种方法

1、前言 在平时对数据库操作时&#xff0c;有时候需要向数据库中插入一些数据&#xff0c;此时就需要使用数据库的插入语句&#xff0c;但是在向数据中库插入数据时&#xff0c;不能盲目插入&#xff0c;因为盲目的插入可能会造成数据重复&#xff0c;浪费数据库的资源&#x…

Pytest三种配置文件

&#x1f60e;&#x1f60e;原文出自&#xff1a;测个der&#xff0c;博主的公众号&#xff0c;格式美观一些。 配置介绍 pytest 的主配置文件&#xff0c;可以改变 pytest 的默认行为&#xff0c;执行 pytest -h&#xff0c;这里有很多配置均可用于 pytest.ini配置 (venv) …

HarmonyOS鸿蒙学习笔记(16)Canvas入门使用

Canvas入门指南1、Canvas代码结构2、简单案例2.1 fillStyle和fillRect 绘制蓝色矩形2.2 strokeRect和strokeStyle 绘制红色边框2.3 lineCap的使用2.4 lineJoin的使用2.5 closePath的使用3、参考资料1、Canvas代码结构 在使用Canvas的时候&#xff0c;需要向初始化RenderingCon…

第四十七讲:IPv6基础知识

一、IPv6网络元素及概念 IPv6的网络元素如下图所示。 节点&#xff1a;任何运行IPv6的设备&#xff0c;包括路由器和主机&#xff08;甚至还将包括PDA、冰箱、电视等&#xff09;。邻节点&#xff1a;连接到同一链路上的节点。这是一个非常重要的概念&#xff0c;因为IPv6的邻…