【java学习—十】HashSet集合(4)

文章目录

  • 1. Java集合概述
  • 2. HashSet
  • 3. 泛型


1. Java集合概述

Java 集合类存放于 java.util 包中,是一个用来存放对象的容器。
① 集合只能存放对象。比如你存一个 int 型数据 1 放入集合中,其实它是自动转换成 Integer类后存入的, Java 中每一种基本类型都有对应的引用类型。
② 集合存放的是多个对象的引用,对象本身还是放在堆内存中。
③ 集合可以存放不同类型,不限数量的数据类型。Java 集合可分为 Set 、 List 和 Map 三种大体系

  • Set :无序、不可重复的集合
  • List :有序,可重复的集合
  • Map :具有映射关系的集合

在 JDK5 之后,增加了泛型, Java 集合可以记住容器中对象的数据类型

2. HashSet

    HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。我们大多数时候说的 set 集合指的都是HashSet
    HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。
HashSet 具有以下特点:
(1)不能保证元素的排列顺序
(2)不可重复(指的是hashcode值不相同)
(3)HashSet 不是线程安全的
(4)集合元素可以使 null
    当向 HashSet 集合中存入一个元素时, HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值决定该对象在HashSet 中的存储位置
    如果两个元素的 equals() 方法返回 true ,但它们的 hashCode() 返回值不相等, hashSet 将会把它们存储在不同的位置,但依然可以添加成功。

在这里插入图片描述

举例1:

package day10;import java.util.HashSet;
import java.util.Set;public class Test3 {public static void main(String[] args) {Set set = new HashSet();set.add(1);//添加元素set.add("a");System.out.println(set);set.remove(1);//移除元素System.out.println(set);System.out.println(set.contains("a"));//判断是否包含元素"a"System.out.println(set.contains(1));//判断是否包含元素 1set.clear();//清空集合System.out.println(set);}
}

运行结果:
在这里插入图片描述

举例2:

  1. 使用 Iterator 接口遍历集合元素
    Iterator 接口主要用于遍历 Collection 集合中的元素, Iterator 对象也被称为迭代器
    Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口
    Iterator 仅用于遍历集合, Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。

  2. 使用 foreach 循环遍历集合元素
    Java 5 提供了 foreach 循环迭代访问 Collection,如:
    for(Person person: persons){
          System.out.println(person.getName ());
    }

package day10;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class Test3 {public static void main(String[] args) {Set set = new HashSet();set.add("a");set.add("b");set.add("c");set.add("d");System.out.println(set);//使用迭代器遍历集合Iterator it = set.iterator();while(it.hasNext()) {System.out.println(it.next());}//for each迭代集合for(Object obj : set) {//把set的每一个值取出来,赋值给obj,直到循环set的所有值System.out.println(obj);}System.out.println(set.size());//获取集合元素的个数}
}

运行结果:

在这里插入图片描述

证明:
(1)不能保证元素的排列顺序
(2)不可重复
(4)集合元素可以使 null

package day10;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class Test3 {public static void main(String[] args) {Set set = new HashSet();set.add("a");set.add("b");set.add("c");set.add("d");set.add("d");//再添加一个d//集合存的值是不重复的set.add(null);//集合元素可以存nullSystem.out.println(set);//使用迭代器遍历集合Iterator it = set.iterator();while(it.hasNext()) {System.out.println(it.next());}//for each迭代集合for(Object obj : set) {//把set的每一个值取出来,赋值给obj,直到循环set的所有值System.out.println(obj);}System.out.println(set.size());//获取集合元素的个数}
}

运行结果:

在这里插入图片描述
从运行结果看,最后添加的null反而排在了第一个位置,说明(1)不能保证元素的排列顺序(根据hashcode值排序)

HashSet 集合判断两个元素相等的标准:两个对象通过 equals() 方法比较相等,并且两个对象的 hashCode() 方法返回值也相等。
如果两个对象通过 equals() 方法返回 true ,这两个对象的hashCode 值也应该相同。

3. 泛型

package day10;import java.util.HashSet;
import java.util.Set;public class Test3 {public static void main(String[] args) {//Set set = new HashSet();Set<Object> set = new HashSet<Object>();//与上面的等价set.add("a");set.add(1);//泛型Set<String> set1 = new HashSet<String>();//指定String为集合的泛型,那么这个集合不能存String类型之外的set1.add("abc");
//		set1.add(1);//不可以添加String之外的类型}
}

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

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

相关文章

如何选择适合企业需求的企业知识库管理软件

随着信息技术的不断发展&#xff0c;知识管理软件在企业中扮演着越来越重要的角色。它们帮助企业有效地组织、存储和共享大量的知识资源&#xff0c;提高团队之间的协作效率&#xff0c;并为决策提供有力支持。那企业该如何才能选到合适的企业知识库管理软件呢&#xff1f; 一、…

css列表样式

html文件如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> <link href"css/style.css" rel"stylesheet" type"text/css">&…

修改svc的LoadBalancer的IP引发的惨案

文章目录 背景修改externalIPs的操作api-server报错日志挽救教训 背景 k8s集群没有接外部负载均衡&#xff0c;部署istio的时候ingressgateway一直pending。 于是手动修改了这个lb svc的externalIP&#xff0c;于是k8s就崩了&#xff0c;如何崩的&#xff0c;且听我还道来。 …

状态模式-对象状态及其转换

某信用卡业务系统&#xff0c;银行账户存在3种状态&#xff0c;且在不同状态下存在不同的行为&#xff1a; 1&#xff09;正常状态&#xff08;余额大等于0&#xff09;&#xff0c;用户可以存款也可以取款&#xff1b; 2&#xff09;透支状态&#xff08;余额小于0且大于-20…

【数据结构】选择排序

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 直接选择、堆排序 1. 直接选择排序2…

IconWorkshop 6软件官方下载:制作ICO/ICON图标、编辑、转换图标

我们都知道在这个版本中&#xff0c;你甚至能够打开 Macintosh(R) 图标并将其转换为 Win(R) 格式。我们必须承认加强的与 Adobe(R) 和 Jasc(R) 色彩文件相兼容的色板和调色板管理系统。可以说这些功能随时都方便易用&#xff1a;内置的浏览器能够用缩略图的形式浏览文件&#x…

【PC】2023年10月商店更新-闲游盒

亲爱的玩家朋友们&#xff0c;大家好&#xff01; 欢迎大家来到2023年第十次商店更新&#xff01; 万圣节即将到来&#xff0c;为了让大家可以在万圣节盛装出席&#xff0c;我们在10月商店更新中准备了邪恶诅咒&#xff0c;PGC 2023的专属宝物&#xff0c;以及RASH悲喜强势回归…

tomcat必要的配置

tomcat要配置两个&#xff0c;不然访问不了localhost:8080 名&#xff1a;CATALINA_HOME 值&#xff1a;D:\software\computer_software\Tomcat\tomcat8.5.66

Zynq UltraScale+ XCZU5EV 纯VHDL解码 IMX214 MIPI 视频,2路视频拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图IMX214 摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存DP 输出 5、vivado工程详解PL端FPGA硬件设计…

多线程---线程池

文章目录 什么是线程池&#xff1f;线程池的实现标准库中的线程池&#xff08;四种&#xff09;自己实现一个线程池 线程池支持的参数在实际的开发中&#xff0c;线程池的线程数如何确定&#xff1f; 什么是线程池&#xff1f; 线程诞生的原因就是进程太“重量”了。虽然线程的…

【洛谷算法题】P5709-Apples Prologue / 苹果和虫子【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5709-Apples Prologue / 苹果和虫子【入门2分支结构】&#x1f30f;题目描述&am…

leetcode-哈希表

1. 理论 从哈希表的概念、哈希碰撞、哈希表的三种实现方式进行学习 哈希表&#xff1a;用来快速判断一个元素是否出现集合里。也就是查值就能快速判断&#xff0c;O&#xff08;1&#xff09;复杂度&#xff1b; 哈希碰撞&#xff1a;拉链法&#xff0c;线性探测法等。只是一种…

进程(详解)

进程 进程PCB进程的定义进程的组成进程模式进程的状态进程的运行进程的创建进程的结束孤儿进程僵尸进程僵尸进程的危害 进程的创建pidforkwait案例 进程 PCB 从操作系统理解进程概念-------先描述&#xff0c;后组织 为了使参与并发执行的程序能独立的运行&#xff0c;必须为之…

H5游戏源码分享-接苹果游戏拼手速

H5游戏源码分享-接苹果游戏拼手速 看看在20秒内能接多少个苹果 <html> <head><title>我是你的小苹果</title><meta charset"utf-8"/><meta name"viewport" content"initial-scale1, user-scalableno, minimum-scale…

【ARM 嵌入式 C 入门及渐进 10 -- 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 比较介绍】

文章目录 排序算法小结排序算法C实现 排序算法小结 C语言中常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序。下面我们来一一介绍&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;冒泡排序是通过比较相邻元素的大小进行排…

本机spark 通idea连接Oracle的坑

1. 报错&#xff1a;Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V 查询网上资料&#xff0c;是idea引入的scala运行环境版本与idea默认的scala版本不一样 也就是写的项目中的pom的spark版本与idea默认的版本不…

【设计模式】第4节:创建型模式之“单例模式”

一、介绍 采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法。 不使用单例模式的UML类图&#xff1a; 使用单例模式的UML类图&#xff1a; 使用场景&#xff1a; 需要频繁创建或销毁的对象…

H5游戏分享-烟花效果

<!DOCTYPE html> <html dir"ltr" lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width" /> <title>点击夜空欣赏烟花</title> <sc…

Zabbix监控oxidized备份状态

Zabbix监控oxidized备份状态 原理是利用oxidized的hooks功能调用zabbix_sender推送数据给zabbix_server 参考 https://cloud.tencent.com/developer/article/1657025 https://github.com/clontarfx/zabbix-template-oxidized https://github.com/ytti/oxidized/blob/master/…

Python 日期和时间处理教程:datetime 模块的使用

Python 中的日期不是独立的数据类型&#xff0c;但我们可以导入一个名为 datetime 的模块来使用日期作为日期对象。 示例&#xff1a;导入 datetime 模块并显示当前日期&#xff1a; import datetimex datetime.datetime.now() print(x)日期输出 当我们执行上面示例中的代码…