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

news2024/11/15 12:07:30

【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/151156.html

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

相关文章

PC企业微信4.0 HOOK逆向

最新功能 企业微信已更新到4.0.X版本 &#xff0c;支持控制台的朋友圈、群发等操作。 功能列表: 企业微信接口文档 个人微信已更新至3.7.6.44 个微接口 ***********************分割线***************************** 请求命令码 2000 获取自己的信息 2001 获取指定好友的信息 2…

Reeds-Shepp曲线基础运动公式推导过程

本文是对之前文章“Reeds-Shepp曲线学习笔记及相关思考【点击可跳转】”的补充&#xff0c;因小伙伴的提问&#xff0c;本文补充介绍上述文章第三部分中基础运动公式的推导过程。 本文以上面的第一个公式为例进行介绍&#xff0c;即Reeds-Shepp曲线基础运动中的向前左转运动&am…

JDK 17 史诗级JVM调优

文章目录 JDK 17 之 JVM调优 史诗级 教程 1 调优层次2 调优指标3 JVM调优原则3.1 优先原则3.2 堆设置3.3 年轻代设置3.4 老年代设置3.5 方法区设置3.6 GC设置3.6.1 GC发展阶段3.6.2 G1的适用场景3.6.3 其他收集器适用场景4 JVM调优步骤4.1 监控分析4.1.1 如何生成GC日志4.1.2 …

python + pandas 如何实现web网页的断点连续采集

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 web 连续采集 三、菜鸟实战 列表页断点连续采集基本思路 基本思路 网页列表页断点连续采集实现 Pandas 保存数据 csv 文件 详情页断点采集思路 基本思路 网页详情页断点连续采集代…

RealWorldCTF2023体验赛 部分WEB

WEB &#x1f411;了拼&#x1f411; 拼图或者直接搜索js文件代码 Evil Mysql Server Mysql恶意服务器读取文件&#xff0c;MySQL_Fake_Server或者Rogue-MySql-Server直接读文件&#xff0c;填写vps的ip端口让服务器连接。 Be-a-Language-Expert 前段时间thinkphp6 多语言…

初级软件测试面试会问什么 拿好这些问题的标准答案,offer不在话下

随着互联网的不断发展&#xff0c;企业对于IT方面的人才需求也越来越大&#xff0c;在追求人才数量的同时&#xff0c;也注重人才质量。而面试就成为把握质量的拦门砖&#xff0c;因此&#xff0c;你想要走心仪的公司&#xff0c;那么你在面试中的表现将会直接决定你求职的成败…

C++ 语法基础课7 —— 类、结构体、指针、引用

文章目录1. 类和结构体1.1 类的定义1.2 类的使用1.3 结构体1.4 构造函数2. 指针和引用2.1 指针2.2 数组2.3 引用2.4 查询地址3. 链表3.1 添加结点3.2 删除结点1. 类和结构体 1.1 类的定义 class Person {private:int age, height;double money;string books[100];public:stri…

嵌入式系统移植导学

目录 系统移植导学 系统移植过程 Windows装机 Linux系统移植 开发板启动过程 系统移植导学 操作系统&#xff1a;向下管理硬件、向上提供接口 操作系统为我们提供了&#xff1a; 1.进程管理 2.内存管理 3.网络接口 4.文件系统 5.设备管理 那系统移植是干什么呢&am…

Zabbix使用LLD自动发现规则发现监控docker容器(下)

本篇是使用Zabbix监控docker容器下篇。利用ZABBIX自动发现监控功能&#xff0c;在部署zabbix agent客户端的服务器上&#xff0c;编写自定义功能脚本&#xff0c;实现自动获取服务器上运行的docker服务并监控其运行状态。 前提条件 已经部署好的zabbix监控系统 Zabbix服务器…

自动驾驶专题介绍 ———— 惯性导航

文章目录介绍工作原理特点应用场景介绍 惯性导航系统&#xff08;Inertial Navigation System - INS&#xff09;是一种不依赖外部输入信息、也不向外辐射能量的自助式导航系统&#xff0c;是通过陀螺仪和加速度计为敏感器件的导航参数解算系统。该系统根据陀螺仪输出建立导航坐…

安全—03day

虚拟主机基于域名、端口、IP访问nginx 一、虚拟主机基于域名访问nginx 1.为虚拟主机提供域名解析 echo "192.168.181.130 www.nj.com www.benet.com" >> /etc/hosts2.为虚拟主机准备网页文档 mkdir -p /var/www/html/benet mkdir -p /var/www/html/nj echo…

linux系统中QT进行文本读写操作的方法

大家好&#xff0c;今天主要和大家聊一聊&#xff0c;利用QT进行文本的读写操作方法。 目录 第一&#xff1a;文本读写基本简介 第二&#xff1a;应用实例 第三&#xff1a;运行效果 第一&#xff1a;文本读写基本简介 有时候我们需要对文件进行读写&#xff0c;比如写个Mp3…

第01讲:Docker入门

一、什么是Docker 1、Docker 是一个开源的应用容器引擎 2、诞生于 2013 年初&#xff0c;基于 Go 语言实现&#xff0c; dotCloud 公司出品&#xff08;后改名为Docker Inc&#xff09; 3、Docker 是一个可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器引擎&…

Java--集合--经典七道综合练习题

文章目录 一、集合的遍历方式 二、添加数字并遍历 三、添加学生对象并遍历 四、添加学生对象并遍历 五、添加用户对象并判断是否存在 六、添加手机对象并返回要求的数据 七、创建学生管理系统&#xff08;*****&#xff09; 一、集合的遍历方式 需求&#xff1a;定义一…

深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”

2022 年&#xff0c;5G 商用发展成效显著&#xff0c;正在加速产业数字化&#xff0c;全面赋能经济社会发展。运营商 5G 投资超过 4000 亿元&#xff0c;共带动 8.6 万亿元的经济产出&#xff0c;而这一切离不开奋战在 ICT 行业的 5G 应用推动者。 日前&#xff0c;由中国工信…

分享104个PHP源码,总有一款适合您

PHP源码 分享104个PHP源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1MnmNb3vsofBnQ4kKoMlSBw?pwdkl4o 提取码&#xff1a;kl4o 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

Python学生信息管理系统源码,学生教师端分离,支持数据的增删查改、数据分析与统计 基于Tkinter带图形界面

介绍 Python学生信息管理系统。学生教师端分离&#xff0c;支持数据的增删查改、数据分析与统计。 下载地址&#xff1a;Python学生信息管理系统源码 软件架构 Python3.9版本 Python-Tkinter库开发的图形界面 Python-Pandas库数据处理 Python-matplotlib库数据分析与展示 P…

C语言经典100例(006,007)

题目&#xff1a;用*号输出字母C的图案。 程序分析&#xff1a;可先用*号在纸上写出字母C&#xff0c;再分行输出。 程序源代码&#xff1a; #include "stdio.h" int main() {printf("用 * 号输出字母 C!\n");printf(" ****\n");printf("…

CSS知识点精学7-小兔鲜项目实现案例

一.网页和网站的关系 包含关系 网页和网站的关系就是包含关系&#xff0c;网站包含了很多的网页&#xff0c;网页不能单独存在于网络中。 网站是一个整体&#xff0c;网页是一个个体&#xff0c;一个网站是由很多网页构建而成。就像进入百度网站&#xff0c;里面还有其他许多…

AI作画怎么弄?超详细ai绘画教程在这里

AI作画怎么弄&#xff1f;如何实现将照片生成ai漫画图&#xff0c;如何通过关键词描述生成好看的壁纸、背景&#xff1f;最全最详细教程来了&#xff0c;一分钟学会&#xff01; 一、将照片生成二次元 我们先打开数画ai绘画软件&#xff0c;在首页这里&#xff0c;点击“相册”…