HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法
import java.util.Set;
import java.util.HashSet; public class SetTest {
public static void main(String[] args) {
/*
*对于用户自己定义类型的数据放在容器(Set)中
*务必重写equals和hashCode方法
*要不然stu1和stu2放在容器中,和觉得是两个不同的元素
**/ //set中存放的元素是无序的
//set中存储的元素是不能够反复的(依据equals方法和hashCode方法推断)
Set set = new HashSet();
Student stu1 = new Student(1, "aaa");
Student stu2 = new Student(1, "aaa");
Student stu3 = new Student(2, "ccc");
Student stu4 = new Student(8, "fff"); set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4); System.out.println(set);
}
} class Student {
private int id;
private String name; public Student(int id, String name) {
this.id = id;
this.name = name;
} @Override
public String toString() {
return this.id + " " + this.name;
} @Override
public boolean equals(Object obj) {
Student stu = (Student) obj; return this.id == stu.id && this.name.equals(stu.name);
} @Override
public int hashCode() {
return this.id*this.name.hashCode();
}
}
输出结果:
[8 fff, 1 aaa, 2 ccc]
假设不重写hashCode和equals方法
import java.util.Set;
import java.util.HashSet; public class SetTest {
public static void main(String[] args) {
/*
*对于用户自己定义类型的数据放在容器(Set)中
*务必重写equals和hashCode方法
*要不然stu1和stu2放在容器中,和觉得是两个不同的元素
**/ //set中存放的元素是无序的
//set中存储的元素是不能够反复的(依据equals方法和hashCode方法推断)
Set set = new HashSet();
Student stu1 = new Student(1, "aaa");
Student stu2 = new Student(1, "aaa");
Student stu3 = new Student(2, "ccc");
Student stu4 = new Student(8, "fff"); set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4); System.out.println(set);
}
} class Student {
private int id;
private String name; public Student(int id, String name) {
this.id = id;
this.name = name;
} @Override
public String toString() {
return this.id + " " + this.name;
}
}
输出结果:
[1 aaa, 1 aaa, 8 fff, 2 ccc]
HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法的更多相关文章
- java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样
一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...
- Java基础系列-equals方法和hashCode方法
原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述 equals方法和hashCode方法都是有Object类定义的. publi ...
- 详解equals()方法和hashCode()方法
前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方 ...
- Java 如何重写对象的 equals 方法和 hashCode 方法
前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...
- 关于Object类的equals方法和hashCode方法
关于Object类的equals的特点,对于非空引用: 1.自反性:x.equals(x) return true : 2.对称性:x.equals(y)为true,那么y.equals(x)也为tr ...
- 详解 equals() 方法和 hashCode() 方法
创建实体类时,最好重写超类(Object)的hashCode()和equals()方法 equals()方法: 通过该实现可以看出,Object类的实现采用了区分度最高的算法,即只要两个对象不是同一个 ...
- equals()方法和hashCode()方法详解
equals()方法和hashCode()方法详解 1. Object类中equals()方法源代码如下所示: /** * Object类中的equals()方法 */ public boolean ...
- Java equals()方法和hashCode()方法
equals()方法 如果满足了以下任何一个条件,就不需要覆盖equals()方法: 1 类的每个实例本质上都是唯一的. 2 不关心类是否提供了“逻辑相等”的测试功能. 3 父类已经覆盖了equals ...
- HashSet中的元素必须重写equals方法和hashCode方法
http://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html 1.为什么必须重写这两个方法. 2.什么事hashSet去重,符合什么样的 ...
随机推荐
- Python-函数参数的传递
作者:Vamei 出处:http://www.cnblogs.com/vamei,感谢博主的分享, python的函数参数传递有这样的几种形式: 1.位置传递 2.关键字传递 3.参数默认值传递 4. ...
- 关于EF调用存储过程那点事...
最近研究了下EF怎么调用 数据库的分页存储过程,发现还是很不错的 1.数据库存储过程如下,一个简单的不含条件判断的 2.然后新建数据模型中选择存储过程: : 3.EF会自动生存一个返回复杂类型(Obj ...
- change login screen wallpaper on ubuntu14.04
install lightdm-gtk-greeter $ apt-get install lightdm config lightdm $ vim /etc/lightdm/lightdm-gtk- ...
- KMP算法入门
学一把看毛片算法我觉得自己才能变得更加出色 明明昨天的题我都知道怎么模拟了,但是还是不会改KMP,是我学丑了 KMP是Knuth-Morris-Pratt三人设计的线性时间字符串匹配算法 nxt数组的 ...
- struts转换器详解
struts转换器:在B/S应用中,将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,提供了类型转换机制. 一.类型转换的意义 对于一个 ...
- [CODEVS1914] 运输问题(最小费用最大流)
传送门 水题. 建图都不想说了 ——代码 #include <queue> #include <cstdio> #include <cstring> #includ ...
- 实时监控linux
https://www.cnblogs.com/tinywan/p/6826125.html
- ios 的版本记录
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // ap ...
- docker基础——自定义镜像、创建私有仓库、查看 docker 运行状态
一.自定义镜像 1,案例1 要求:请自定义一个 docker 镜像,基于 hub.c.163.com/library/centos,要求创建出来的镜像在生成容器的时候,可以直接使用 ifconfig ...
- ADO:DataSet合并两张表( ds.Merge(ds1))
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...