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;字符串常量池…

Egret中使用P2物理引擎

游戏中的对象按照物理规律移动&#xff0c;体现重力、引力、反作用力、加速度等物体特性&#xff0c;实现自由落体、摇摆运动、抛物线运动&#xff0c;以及物理碰撞现象的模拟。用于模拟物理碰撞、物理运动的引擎称为物理引擎。 来自瑞典斯德哥尔摩大学的Stefan Hedman基于Java…

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

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

利用JSONP解决AJAX跨域问题的原理与jQuery解决方案

写在前面 跨域的解决方案有多种&#xff0c;其中最常见的是使用同一服务器下的代理来获取远端数据&#xff0c;再通过ajax进行读取&#xff0c;而在这期间经过了两次请求过程&#xff0c;使得获取数据的效率大大降低&#xff0c;这篇文章蓝飞就为大家介绍一下解决跨域问题的一种…

江西理工大学南昌校区cool code竞赛

这次比赛原本就是来打酱油的&#xff0c;想做个签到题就走&#xff01;一开始不知道1002是签到题&#xff0c;一直死磕1001&#xff0c;WA了四发过了&#xff0c;回头一看Rank&#xff0c;三十名&#xff0c;我靠&#xff01;看了1001的AC率&#xff0c;在我AC之前只有一个人AC…

mysql 枚举_详解MySQL数据类型之枚举类型ENUM的用法

本节主要内容&#xff1a;MySQL数据类型之枚举类型ENUMMySQL数据库提供针对字符串存储的一种特殊数据类型&#xff1a;枚举类型ENUM&#xff0c;这种数据类型可以给予我们更多提高性能、降低存储容量和降低程序代码理解的技巧&#xff0c;前面介绍了首先介绍了四种数据类型的特…

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

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

如何实现一个教师与学生教学辅助平台?

在软件工程的学习过程中&#xff0c;我们要完成一个团体项目&#xff0c;关于个人教学辅助系统&#xff0c;对于这个&#xff0c;还有太多要学。对于如何实现其中的功能&#xff0c;我们会利用到html&#xff0c;css等语言来编写网页前端&#xff0c;同样也会用到数据库的知识。…

证明创建runnable实例和普通类时间一样长

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//证明创建runnable实例和普通类时间一样长public class Test002 { private Concurre…

mysql数据库维护_维护MySQL数据库表

在本教程中&#xff0c;我们将向您介绍一些非常有用的语句&#xff0c;使您可以在MySQL中维护数据库表。MySQL提供了几个有用的语句&#xff0c;可以有效地维护数据库表。 这些语句使您能够分析&#xff0c;优化&#xff0c;检查和修复数据库表。分析表语句MySQL查询优化器是My…

node-glob 正则表达式

https://github.com/isaacs/node-glob转载于:https://www.cnblogs.com/chris-oil/p/6507368.html

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

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

python连接access数据库odbc_对Python通过pypyodbc访问Access数据库的方法详解

看书上通过ODBC访问数据库的案例&#xff0c;想实践一下在Python 3.6.1中实现access2003数据库的链接&#xff0c;但是在导入odbc模块的时候出现了问题&#xff0c;后来查了一些资料就尝试着使用pypyodbc&#xff0c;最后成功了。操作步骤&#xff1a;①安装pypyodbc目前Python…

mysql异机备份

xx.xx..4.43----xx.xx..4.51 1、配置client通过密钥来连接server 43机器上&#xff1a; /root/.ssh 目录下执行 ssh-keygen -t rsa ls /root/.ssh会发现在/root/.ssh下生成一对密钥id_dsa和id_dsa.pub&#xff0c;将生成的公钥id_dsa.pub拷贝到server的/root/.ssh目录下&#…

周末想找个地方敲代码_观看我们的代码游戏,全周末直播

周末想找个地方敲代码by freeCodeCamp通过freeCodeCamp 观看我们的代码游戏&#xff0c;全周末直播 (Watch us Code Games Live All Weekend) Note: this was originally published on our now-defunct blog on July 15, 2015.注意&#xff1a;该文章最初于2015年7月15日发布在…

5.7和5.6的mysql_mysql5.6和5.7的区别

展开全部MySQL 5.7 已经开发两年了。相比 MySQL 5.6&#xff0c;有特别多的改进。团队主要关注速度&#xff0c;性能据报告是比之前62616964757a686964616fe4b893e5b19e31333365643661版本提升了 2 至 3 倍。新特性列表&#xff0c;主要改进&#xff1a;提升 MySQL 安全性改进了…

01:数制转换

01:数制转换 查看提交统计提问总时间限制: 1000ms内存限制: 65536kB描述求任意两个不同进制非负整数的转换&#xff08;2进制&#xff5e;16进制&#xff09;&#xff0c;所给整数在long所能表达的范围之内。不同进制的表示符号为&#xff08;0&#xff0c;1&#xff0c;...&am…