关于Set集合去重[通俗易懂]

关于Set集合去重[通俗易懂]上次说了List集合的去重,这次来说说Set集合的去重publicstaticvoidmain(String[]args){ HashSeths=newHashSet<>(); hs.add(“a”); hs.add(“b”); hs.add(“c”); hs.add(“a”); hs.add(“a”); for(Objectobj:…

大家好,又见面了,我是你们的朋友全栈君。

上次说了List集合的去重,这次来说说Set集合的去重

public static void main(String[] args) {
		HashSet hs=new HashSet<>();
		hs.add("a");
		hs.add("b");
		hs.add("c");
		hs.add("a");
		hs.add("a");
		for (Object obj : hs) {
			System.out.println(obj);
		}
	}

在这里插入图片描述
从中可以看出HashSet中是有去重功能的,那我们来试试自定义对象,看看能不能去重。

package com.liang.set;

import java.util.HashSet;
public class SetRemo {
	public static void main(String[] args) {
		HashSet hs=new HashSet<>();
		hs.add(new Student("a","12"));
		hs.add(new Student("b", "12"));
		hs.add(new Student("c", "13"));
		hs.add(new Student("c","12"));
		hs.add(new Student("a","12"));
		for (Object obj : hs) {
			if(obj instanceof Student) {
				Student stu=(Student)obj;
				System.out.println(stu.getName()+stu.getAge());
			}
		}
	}
}
class Student{
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Student(String name, String age) {

		this.name = name;
		this.age = age;
	}
	public Student() {
	
	}
	
}

结果如下
在这里插入图片描述
HashSet元素是自定义对象时,它的去重功能失效了,那怎么才能实现去重呢?
下面让我们来看看代码该怎么写

package com.liang.set;

import java.util.HashSet;




public class SetRemo {

	public static void main(String[] args) {
		HashSet hs=new HashSet<>();
		hs.add(new Student("a","12"));
		hs.add(new Student("b", "12"));
		hs.add(new Student("c", "13"));
		hs.add(new Student("c","12"));
		hs.add(new Student("a","12"));
		
		
		for (Object obj : hs) {
			if(obj instanceof Student) {
				Student stu=(Student)obj;
				System.out.println(stu.getName()+stu.getAge());
			}
		}
		
	}
}
class Student{
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Student(String name, String age) {

		this.name = name;
		this.age = age;
	}
	public Student() {
	
	}
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return this.getName().hashCode()+this.getAge().hashCode();
	}
	@Override
	public boolean equals(Object obj) {
			if(obj instanceof Student) {
				Student s=(Student)obj;
				return this.getName().equals(s.getName()) && this.getAge().equals(s.getAge());
			}
		return false;
	}
}

运行结果如下
在这里插入图片描述
去重完成了!
这是为什么呢?原因是HashSet去重时自动调用hashCode()方法,这个方法会返回一个哈希值,只有当这个哈希值相等时才会调用equals()方法进行去重.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134086.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 邮箱正则校验[通俗易懂]

    邮箱正则校验[通俗易懂]”^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$”这个是一个企业级的程序里copy出来的。合法E-mail地址:1.必须包含一个并且只有一个符号“@”2.第一个字符不得是“@”或者“.”3.不允许出现“@.”或者.@4.结尾不得是字符“@”或者“.”…

    2022年6月15日
  • 三星galaxy S4快捷功能

    三星galaxy S4快捷功能

    2021年12月15日
  • openwrt外网web管理_OpenAPI

    openwrt外网web管理_OpenAPI转自:http://odoodevelop.lofter.com/1.web模块注意,OpenERP模块中web部分用到的所有文件必须被放置在模块内的 static 文件夹里。这是强制性的,出于安全考虑。事实上,我们创建的文件夹CSS,JS和XML,仅仅是一个习惯。static文件夹oepetstore/static/css/petst

    2022年10月28日
  • Kong网关安装_kong网关配置

    Kong网关安装_kong网关配置环境 系统:CentOS7x64 虚拟机:VmwareVMwareWorkstationPro15.1.0build-13591040 安装文档参考官网:https://docs.konghq.com/install/centos/?_ga=2.233277657.61846631.1567134300-1983202451.1567134300 配置yum; 方…

    2022年9月10日
  • 用C语言进行Windows编程入门

    用C语言进行Windows编程入门用C语言进行Windows编程入门本文对一般教程或网上有的(如C语言语法等基础)不深入介绍,对初学者易造成疑惑误解或难以找到的内容进行较详尽的介绍。学习C语言很久了,一直面对控制台应用程序(Win32ConsoleApplication),没有漂亮的界面,是不是不爽呀。用C开发图形界面程序,有多种技术方案,本文希望用简单的例子,深入浅出的介绍一种方案——用C和SDK进行图形界面编程。…

    2022年6月18日
  • mysql resulttype_MyBatis-resultType 与 resultMap 中的几种返回类型「建议收藏」

    一、返回集合1.返回JavaBean集合publicListselectMyUserByNameLike(Stringname);select*frommyuserwherenamelike#{name}测试方法publicstaticvoidmain(String[]args){SqlSessionsession=null;try{InputStreaminpu…

    2022年4月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号