JAVA Set接口和其常用子类HashSet集合

Set接口,它里面的集合,所存储的元素就是不重复的。

HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。

保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

 

HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法,在JavaAPI的每个类中已经重写完毕,如String类、Integer类等。

 创建HashSet集合,存储String对象。

package com.oracle.www.demo03;
import java.util.HashSet;import javax.swing.plaf.synth.SynthSeparatorUI;
public class Demo03 {public static void main(String[] args) {
//获得Object对象,输出Object的hashCode算法Object obj
= new Object();System.out.println(obj.hashCode());
//创建Hash对象HashSet
<String> set = new HashSet<String>();set.add("abc");set.add("bcd");set.add("ghj");set.add("abc");
//遍历集合
for(String s:set) {System.out.println(s);System.out.println(s.hashCode());}}}

输出结果如下,说明集合中不能存储重复元素:

370988149
bcd
97347
abc
96354
ghj
102313

 HashSet存储自定义类型元素

HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一。

自定义Student类

public class Student {private String name;private int age;public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if(!(obj instanceof Student)){System.out.println("类型错误");return false;}Student other = (Student) obj;return this.age ==  other.age && this.name.equals(other.name);}
}

 

 创建HashSet集合,存储Student对象。

public class HashSetDemo {public static void main(String[] args) {//创建HashSet对象HashSet hs = new HashSet();//给集合中添加自定义对象hs.add(new Student("zhangsan",21));hs.add(new Student("lisi",22));hs.add(new Student("wangwu",23));hs.add(new Student("zhangsan",21));//取出集合中的每个元素Iterator it = hs.iterator();while(it.hasNext()){Student s = (Student)it.next();System.out.println(s);}}
}

输出结果如下,说明集合中不能存储重复元素:

Student [name=lisi, age=22]

Student [name=zhangsan, age=21]

Student [name=wangwu, age=23]

 

 

HashSet下面有一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。LinkedHashSet为双链接结构,所以能保证唯一性和有序存储。

package com.cracle.www.demo01;import java.util.HashSet;
import java.util.LinkedHashSet;public class Demo01 {public static void main(String[] args) {//LinkedHashSet不能存重复元素,但是是有序的,是HashSet的子类。LinkedHashSet<String> has = new LinkedHashSet<String>();has.add("c");has.add("b");has.add("a");for(String a:has) {System.out.println(a);}}}

输出为 

c
b
a

转载于:https://www.cnblogs.com/time-to-despair/p/9763581.html

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

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

相关文章

python初始化函数_当你学会了Python爬虫,网上的图片素材就免费了

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。加入作者的python学习圈子&#xff1a;1156465813 即可免费获取&#xff0c;资料全在群文件里。资料可以领取包括不限于Python实战演练、PDF电子文档…

第三周作业(一)单元测试

下载vs2015安装包&#xff0c;打开进行安装. 选择颜色 安装完成&#xff0c;需要登录 启动vs 单元测试 1.打开vs界面。 2.新建项目。选择Visual C# 创建类库。 3.点击确定后&#xff0c;进入代码编辑界面。 4.根据书中代码&#xff0c;写入程序&#xff0c;并进行测试。 转载于…

React-Native-lesson

React-Native-lesson 一、React-Native入门指南 lesson2: 认识代码结构lesson4: 学会React-Native布局&#xff08;一&#xff09;lesson6: UI组件lesson8: 自己动手写组件 https://github.com/vczero/toilet React Native完全开发的独立App&#xff0c;支持ES6语法&#xff0c…

1、如何进行字符串常量中的字符定位_Java String:字符串常量池,我相信会有很多朋友不很理解这部分...

作为最基础的引用数据类型&#xff0c;Java 设计者为 String 提供了字符串常量池以提高其性能&#xff0c;那么字符串常量池的具体原理是什么&#xff0c;我们带着以下三个问题&#xff0c;去理解字符串常量池&#xff1a;字符串常量池的设计意图是什么&#xff1f;字符串常量池…

react项目_如何从零开始创建React项目(三种方式)

在开发React项目前最关键的当然是项目的创建&#xff0c;现在的前端工程化使得前端项目的创建也变得越来越复杂&#xff0c;在这里介绍三种从零开始创建React项目的方式&#xff0c;分别是在浏览器中直接引入、使用官方脚手架create-react-app、使用Webpack创建。浏览器中通过标…

# 异运算_小学数学运算三要点:定律、法则与顺序(解析)

很多孩子的数学不好&#xff0c;尤其是女孩子。家长往往认定为数学不好就是孩子不擅长&#xff0c;能力差。其实未必&#xff0c;有的孩子数学不好的原因并不在于智商&#xff0c;而是没有理解到数学的方法与逻辑&#xff0c;比如小学的运算中&#xff0c;很多孩子并没有了解到…

机器学习笔记—再谈广义线性模型

前文从线性回归和 Logistic 回归引出广义线性回归的概念&#xff0c;很多人还是很困惑&#xff0c;不知道为什么突然来个广义线性回归&#xff0c;有什么用&#xff1f;只要知道连续值预测就用线性回归、离散值预测就用 Logistic 回归不就行了&#xff1f;还有一些概念之间的关…

局域网只能看到一部分电脑_win10 网上邻居看不到其它电脑、共享不了文件

最近电脑遇到了局域网文件共享的问题&#xff0c;Win 10 系统在网络和共享中心里无法看到其他电脑&#xff0c;只能看到本机。确认共享已经打开后&#xff0c;通过查找最终解决。下面是解决流程。1.进入&#xff1a;控制面板 – 网络和共享中心 – 更改高级共享设置&#xff0c…

作业1---四则运算

一.需求分析&#xff1a; 除了整数以外&#xff0c;还要支持真分数的四则运算&#xff0c;真分数的运算&#xff0c;例如&#xff1a;1/6 1/8 7/24 运算符为 , −, , 并且要求能处理用户的输入&#xff0c;并判断对错&#xff0c;打分统计正确率。 要求能处理用户输入的真分…

Lesson 001 —— 数据

Lesson 001 —— 数据 数据&#xff08;data&#xff09;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。数据是信息的表现形式和载体&#xff0c;可以使符号、文字、数字、语音、图像、视频等。 进制 进制也就是进…

sql三个表join_「数据蒋堂」第 31 期:JOIN 简化 – 维度对齐

【数据蒋堂】第 31 期&#xff1a;JOIN 简化 – 维度对齐我们先把上一期中双子表对齐例子的 SQL 写出来&#xff1a;SELECT Orders.id, Orders.customer, A.x, B.y FROM Orders LEFT JOIN (SELECT id,SUM(price) x FROM OrderDetail GROUP BY id ) A ON Orders.idA.id LEFT J…

python-3.6.2安装

1、下载python-3.6.2-amd64.exe安装包 官网下载地址&#xff1a;https://www.python.org/ 2、Python安装&#xff0c;双击傻瓜式安装&#xff08;用英文路径&#xff0c;不要有空格&#xff09;&#xff0c; 特别要注意勾上Add Python 3.6 to PATH&#xff08;勾选后&#xff0…

vc mysql init 崩溃_故障分析 | 崩溃恢复巨慢原因分析

作者&#xff1a;xuty本文来源&#xff1a;原创投稿*爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。一、现象有个 MySQL 5.7 开发库异常挂掉后&#xff0c;奔溃恢复一直处于如下位置&#xff0c;且持续了 2 小时左右才起来…

surfaceview结束后怎么处理_污泥压滤机处理后的污泥怎么处置

在污泥处理处置中&#xff0c;污泥压滤机处理污泥只是对污泥进行脱水&#xff0c;并没有实现污泥资源化处置。再进行污泥“减量化、无害化、资源化”处理时&#xff0c;许多企业用污泥压滤机对污泥脱水处理后就不知道怎么继续处置了&#xff0c;从而使污泥饼无处可去&#xff0…

js数组详解

1&#xff0c;什么是数组数组是值得有序集合&#xff0c;每个值叫做一个元素&#xff0c;而每个元素在数组中有一个位置&#xff0c;以数字表示&#xff0c;称为索引。js的数组是无类型的&#xff0c;数组元素可以是任意类型&#xff0c;同一个数组中的不同元素可能是对象或数组…

[转载]linux内存映射mmap原理分析

转自&#xff1a;http://blog.csdn.net/yusiguyuan/article/details/23388771 内存映射&#xff0c;简而言之就是将用户空间的一段内存区域映射到内核空间&#xff0c;映射成功后&#xff0c;用户对这段内存区域的修改可以直接反映到内核空间&#xff0c;同样&#xff0c;内核空…

冒泡、快速排序小结

1.冒泡排序 (1) 比较领近的两个数 (2) 如果左边的比右边的数字大&#xff0c;则交换位置 (3) 向右移动一位&#xff0c;继续比较相邻的两个数 排序示例&#xff1a; 一轮排序结束后&#xff0c;最大值的位置已经移动最右端&#xff0c;再次如此循环&#xff0c;最终经过n-1次则…

synchronized 异常_由浅入深,Java 并发编程中的 Synchronized

synchronized 作用synchronized 关键字是 Java 并发编程中线程同步的常用手段之一。1.1 作用&#xff1a;确保线程互斥的访问同步代&#xff0c;锁自动释放&#xff0c;多个线程操作同个代码块或函数必须排队获得锁&#xff0c;保证共享变量的修改能够及时可见&#xff0c;获得…

Linux内存分配机制之伙伴系统和SLAB

转载请注明原文地址&#xff1a;http://www.cnblogs.com/ygj0930/p/6539590.html 内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下&#xff0c;避免碎片的产生。这就要求内核采取灵活而恰当的内存分配策略。通常&#xff0c;内存分配一般有两种情况&#xff1a…

this.$modal.confirm 自定义按钮关闭_自定义函数,让你玩转Excel得心应手

让“自动更正”输入统一的文本&#xff0c;你是不是经常为输入某些固定的文本,如《电脑报》而烦恼呢?那就往下看吧。1.执行“工具→自动更正”命令,打开“自动更正”对话框。2.在“替换”下面的方框中输入“pcw”(也可以是其他字符,“pcw”用小写),在“替换为”下面的方框中输…