关于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python+selenium环境搭建_pycharm配置anaconda环境

    python+selenium环境搭建_pycharm配置anaconda环境最近在研究python+selenium进行自动化测试。然后用的python开发工具是Pycharm。然后,今天就跟大家讲一下怎么搭建一整套的自动化测试环境。安装python首先,安装python。python可以在官网下载。安装可参考链接:http://blog.csdn.net/florachy/article/details/72769813我安装的是python3.6.0:…

    2022年8月28日
    0
  • 信息系统项目的范围管理论文_高级项目管理师论文

    信息系统项目的范围管理论文_高级项目管理师论文本人参加了2019年上半年信息系统项目管理师考试,目前已经通过。论文我压了2篇,但是都没有压中,考场看到题目差点吐血,还好后面按照自己的思路也顺利过关。这里和大家分享一下我的论文资料,大家可以参考。摘要20xx年x月,我作为项目经理参与了深圳市某上市公司的生产管理系统项目。该项目总投资300万人民币,建设工期为10个月,通过项目的建设,实现了该公司物料管理、库存管理、生产工单、生产计划、生产派…

    2022年9月16日
    0
  • sql学生选课管理系统[通俗易懂]

    sql学生选课管理系统[通俗易懂]一、概要设计1.1目的和意义学生选课系统作为一种现代化的教学技术,被广泛应用于学校的学生选课,是一个学校不可或缺的部分,学生选课系统使管理选课信息更加简单,学生选课更加方便。学生选课系统的将使选课管理工作规范化、系统化、程序化,避免选课管理的无条理性,提高信息处理的速度和准确性,能够准确、及时、有效的查询和修改学生选课情况。与传统的选课方式相比,网上选课系统利用局域网为学生选课带来了极大的便捷。学生在公共机房,或者宿舍的个人电脑上便可以通过校园网络来选课。在选课时间内,学生能够使用选课系统灵活的修

    2022年10月9日
    0
  • MYSQL截取字符串前后数据

    MYSQL截取字符串前后数据select LEFT(‘一把刀把|YBDB’,locate(‘|’,’一把刀把|YBDB’)-1)’前面’, substr(‘一把刀把|YBDB’,locate(‘|’,’一把刀把|YBDB’)+1,octet_length(‘一把刀把|YBDB’))’后面’substr(‘’,‘’,‘’)从竖线取值到结尾locate(‘|’,‘一把刀把|YBDB’)竖线位置octet_length(‘一把刀把|YBDB’)字符长度…

    2022年5月26日
    39
  • pycharm中彻底删除一个工程的步骤_ios已购项目永久删除

    pycharm中彻底删除一个工程的步骤_ios已购项目永久删除第一步    File——>CloseProject找到要关闭的项目,点击×。第二步    找到该项目保存的路径,shift+del永久删除。

    2022年8月28日
    0
  • org.apache.lucene.analysis.TokenStream.incrementToken()Z

    org.apache.lucene.analysis.TokenStream.incrementToken()Z在使用lucene3与paoding集成的时候可能会出现以下错误:Exceptioninthread"main"java.lang.AbstractMethodError:org.apache.lucene.analysis.TokenStream.incrementToken()Z atorg.apache.lucene.index.DocInverterPerField.pro…

    2022年7月22日
    7

发表回复

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

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