Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Set容器--HashSet集合

Set容器--HashSet集合

作者头像
赵小忠
发布于 2018-01-24 11:02:55
发布于 2018-01-24 11:02:55
58400
代码可运行
举报
文章被收录于专栏:禁心尽力禁心尽力
运行总次数:0
代码可运行

Set容器特点

①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序;

②   最常用的两个Set接口的实现类是HashSet和TreeSet;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         HashSet<String> data=new HashSet<String>();
2         data.add("张三");
3         data.add("李四");
4         data.add("jay");
5         data.add("jack");
6         data.add("jay");
7         System.out.println(data);

输出结果:

[张三,李四,jay,jack]

此处第二个jay没有存入;

可以将其打印出来System.out.println(data.add("jay"));,结果显示第一个为true,第二个为false

编写一个Student类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class Student{
 2     private String name;
 3     private int age;
 4     public Student(String name, int age) {
 5         super();
 6         this.name = name;
 7         this.age = age;
 8     }
 9     public String getName() {
10         return name;
11     }
12     public void setName(String name) {
13         this.name = name;
14     }
15     public int getAge() {
16         return age;
17     }
18     public void setAge(int age) {
19         this.age = age;
20     }
21 }

主方法中添加及输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         HashSet<Student> stuSet=new HashSet<Student>();
2         System.out.println(stuSet.add(new Student("张三",20)));
3         System.out.println(stuSet.add(new Student("李四",30)));
4         System.out.println(stuSet.add(new Student("张三",20)));
5         System.out.println(stuSet.size());
6     

输出结果:

true

true

true

3

由此可见:new Student("张三",20)两次都创建了,若想字相同时只创建一次则需重构hashCode和equals方法

如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1     @Override
 2     public int hashCode() {
 3         final int prime = 31;
 4         int result = 1;
 5         result = prime * result + age;
 6         result = prime * result + ((name == null) ? 0 : name.hashCode());
 7         return result;
 8     }
 9     @Override
10     public boolean equals(Object obj) {
11         if (this == obj)
12             return true;
13         if (obj == null)
14             return false;
15         if (getClass() != obj.getClass())
16             return false;
17         Student other = (Student) obj;
18         if (age != other.age)
19             return false;
20         if (name == null) {
21             if (other.name != null)
22                 return false;
23         } else if (!name.equals(other.name))
24             return false;
25         return true;
26     }

再次执行,输出结果:

true

true

false

2

总结:HashSet的内部操作的底层数据是HashMap,只是我们操作的是HashMap的key;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-04-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaSE(八)集合之Set
今天这一篇把之前没有搞懂的TreeSet中的比较搞得非常的清楚,也懂得了它的底层实现。希望博友提意见! 一、Set接口 1.1、Set集合概述   Set集合:它类似于一个罐子,程序可以依次把多个对象 “丢进” Set 集合,而 Set 集合通常不能记住元素的添加的顺序,也就是说Set 集合是无序的。         Set 集合与 Colleaction 基本相同,没有提供额外的方法,实际上 Set 就是 Collection,只是行为略有不同(Set 不允许包含重复元素)。 1.2、Set类型集合特点
用户1195962
2018/01/18
1K0
JavaSE(八)集合之Set
集合(下)
HashSet 是 Set 接口的实现类,底层数据结构是哈希表。HashSet 是线程不安全的(不保证同步)。优点:添加、删除、查询效率高;缺点:无序
Carlos Ouyang
2019/08/19
3090
集合(下)
集合框架【第二章】——Set(HashSet与TreeSet)
1. Set   1.1 特点:无序、对象不能重复   1.2 遍历     1.2.1 foreach     1.2.2 迭代器      1.3 常用实现类       HashSet
用户10196776
2022/11/22
2320
集合框架【第二章】——Set(HashSet与TreeSet)
集合-续
因此在添加自定义对象想达到想要的去重效果就要重写HashCode()与equals()方法
木瓜煲鸡脚
2019/07/22
2930
集合-续
Java——类集框架:Set集合接口的详解及应用举例
Set也是Collection的子接口,主要特点是保存的数据不允许出现重复。但Set子接口并不像List子接口那样,针对Collection接口进行扩展,而是完整按照Collection接口标准实现了继承,所以没有get方法。
Winter_world
2020/09/25
4610
Java——类集框架:Set集合接口的详解及应用举例
Set集合
  Set接口也是Collection的子接口,Set接口没有提供额外的方法。Set集合支持的遍历方式也和Collection集合一样,使用foreach和Iterator遍历。
别团等shy哥发育
2023/02/25
6590
Set集合
HashMap和HashSet
编程思维
2023/08/17
2710
HashMap和HashSet
HashSet存储元素保证唯一性的代码及图解
需求:存储自定义对象,并保证元素的唯一性 要求:如果两个对象的成员变量值都相同,则为同一个元素。 示例代码如下: 1 package cn.itcast_02; 2 3 /** 4
黑泽君
2018/10/12
4990
Java Set集合 HashSet
HashSet存储对象,应重写hashCode()和equals()方法,以便更好控制集合中的这些元素
用户2965768
2019/03/05
7130
Mybatis之多表查询
Mybatis之多表查询 本人独立博客https://chenjiabing666.github.io/ 一对一的查询(<assocation>) 创建Java类 创建User类(用户类) public class User implements Serializable { private static final long serialVersionUID = 6716332190979093860L; private Integer id; private String use
爱撒谎的男孩
2018/05/10
2.4K3
Mybatis之多表查询
Java集合框架
一、集合: 集合是Java API所提供的一系列类的实例,可以用于动态存放多个对象 为什么要使用集合?数组的长度是固定的,存满了就不能存了。集合可以存储不同类型的对象,而且它的容量可以随着对象数量的增加,自动扩大。 ----------------------------------------------------------------------------------------------------------------------------------- 二、List集合 List:存储
听着music睡
2018/05/18
2K0
【Java】java 集合框架(详解)
🔥 Java集合框架 提供了一系列用于存储和操作对象组的接口和类。这些工具是为了解决不同数据结构通用操作的需求而设计的。集合框架主要包括两种类型的容器:
IsLand1314
2025/06/02
1700
【Java】java 集合框架(详解)
Java Set集合的详解
引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(java是依据对象的内存地址计算出的此序号),所以两个不同的对象的hashCode值是不可能相等的。
全栈程序员站长
2022/07/01
4700
Java Set集合的详解
Set集合和其子类HashSet、LinkedHashSet
java.util.Set接口和 java.util.List接口一样,同样继承自 Collection接口,它与 Collection接口中的方法基本一致,并没有对 Collection接口进行功能上的扩充,只是比 Collection接口更加严格了。与 List接口不同的是, Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。 Set集合有多个子类,这里我们介绍其中的 java.util.HashSet、 java.util.LinkedHashSet这两个集合。
共饮一杯无
2022/11/28
3960
Set集合和其子类HashSet、LinkedHashSet
第十八天 集合-泛型&list接口&set接口【面试+工作】
泛型的使用:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
Java帮帮
2018/07/26
8250
第十八天 集合-泛型&list接口&set接口【面试+工作】
【17】JAVASE-集合专题【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
2120
【17】JAVASE-集合专题【从零开始学JAVA】
java基础第十三篇之Collection
常见的几种数据结构: * 1.堆栈:先进后出 * 2.队列:先进先出 * 3.数组:查找快,增删慢 * 4.链表:查找慢,增删快 import java.util.LinkedList;
海仔
2019/08/05
5750
Java集合
LinkedList使用的方法都是从List接口实现而来的方法,需要了解的是LinkedList特有方法:
闲花手札
2021/08/24
1.9K0
【day20】集合深入探讨
按照斗地主的规则,完成洗牌发牌的动作。具体规则:使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
程序员波特
2024/12/30
740
【day20】集合深入探讨
Java基础-17(01)总结,登录注册案例,Set集合,HashSet
需求:用户登录注册案例。 按照如下的操作,可以让我们更符号面向对象思想 A:有哪些类呢? B:每个类有哪些东西呢? C:类与类之间的关系是什么呢? 分析: A:有哪些类呢? 用户类 测试类
Java帮帮
2018/03/15
9740
相关推荐
JavaSE(八)集合之Set
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验