关于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()方法进行去重.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java—二分查找法[通俗易懂]

    java—二分查找法[通俗易懂]/** * 二分查找法 * 注: 数组元素必须有顺序 * */public class sort4 { public static void main(String[] args) { int [] arr ={1,2,3,4,5,6,7,8}; int a = binarySerarch(arr,7); // 从这些数中查找7返回这个数字的索引 System….

  • 鼠标键盘事件有哪些_奇葩键盘

    鼠标键盘事件有哪些_奇葩键盘不会还有人没听过键盘事件吧

    2022年10月24日
  • USB协议基础篇

    USB协议基础篇初次接触USB的同学,可能会被里面各种名词给搞晕,下面就来梳理一下这些知识,希望能帮助大家理解USB。文章目录 一,从最常见的名词说起 1.1什么是USB 1.2USB协议版本 1.3USB接口分类 1.4PIPE 1.5endpoint 1.6管道通信方式 1.7传输方式 1.7逻辑设备 1.8interface 1.9class协议 1.10host/device 二,USB框架/拓扑结构

  • 191. Number of 1 Bits Leetcode Python

    191. Number of 1 Bits Leetcode Python

  • Java免费的开发工具有哪些?分享这15个!

    Java免费的开发工具有哪些?分享这15个!随着Java行业需求增加,Java工程师岗位薪资节节升高,很多小伙伴想要通过快速的方式掌握Java技能。对于初学Java的小伙伴来说了解一些免费的Java开发工具让我们工作、学习更顺畅,那么免费Java开发工具有哪些?针对这点我汇总了一些,可供参考。1、Java免费开发工具:JDK(Java开发工具包)如果你打算用Java开发一些小程序和应用程序,那么首先得给自己准备一个类似于JDK的工具,…

  • xdoj递归数列_递归求数组元素之和

    xdoj递归数列_递归求数组元素之和标题:递归数列类别函数与递归程序类型:代码片段时间限制:2S内存限制10000Kb问题描述一个数列A定义如下A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……A(n)=1/(1+A(n-1))。定义一个函数function用来计算数列的第第n项的值,函数声明如下:doublefunction(intn);输入说明:输入为1个正整数n,n<=10。输出说明函数输出数列A第n项的值,…

发表回复

您的电子邮箱地址不会被公开。

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