import java.util.ArrayList;
02 import java.util.HashSet;
03 import java.util.List;
04 import java.util.Set;
05
06 /**
07 * 编写者:CP
08 * 编写日期:2011-9-7
09 * <br />类描述:set集合针对String 类型和8大基础数据类型 过滤掉重复数据,如果存放的是其他类型对象,则需要重写hashCode方法和equals方法,当equals 比较相等时,则会去比较hashCode值 hashCode的值 如果一致的话,则不会存进set
10 */
11 public class SetDemo {
12
13 public static void main(String[] args) {
14 Set<String> nameSet = new HashSet<String>();
15 nameSet.add("张三");
16 nameSet.add("李四");
17 nameSet.add("王五");
18 nameSet.add("张三");
19
20 // 输出结果 张三 李四 王五
21 for(String name : nameSet){
22 System.out.print(name + "\t");
23 }
24 // List集合去除重复基础数据
25 List<String> nameList = new ArrayList<String>();
26 nameList.add("张三");
27 nameList.add("李四");
28 nameList.add("王五");
29 nameList.add("赵六");
30 nameSet.addAll(nameList);
31
32 // 输出结果 张三 李四 王五 赵六
33 for(String name : nameSet){
34 System.out.print(name + "\t");
35 }
36
37 // 去除编号和用户名一样的 对象,需要重写 equals 方法 和 hashCode方法
38 User admin = new User(1, "admin");
39 User user = new User(2, "user");
40 User user1 = new User(2, "user");
41 User admin1 = new User(3, "admin");
42
43
44 Set<User> userSet = new HashSet<User>();
45 userSet.add(admin);
46 userSet.add(user);
47 userSet.add(admin1);
48 userSet.add(user1);
49 // 输入结果 admin1 admin3 user2
50 for(User u : userSet){
51 System.out.print(u.username + u.id + "\t");
52 }
53
54 System.out.println(user.equals(null));
55 }
56 }
57
58 class User{
59
60 protected Integer id;
61
62 protected String username;
63
64 public User(Integer id, String username){
65 this.id = id;
66 this.username = username;
67 }
68
69
70 /**
71 * 如果对象类型是User 的话 则返回true 去比较hashCode值
72 */
73 @Override
74 public boolean equals(Object obj) {
75 if(obj == null) return false;
76 if(this == obj) return true;
77 if(obj instanceof User){
78 User user =(User)obj;
79 // if(user.id = this.id) return true; // 只比较id
80 // 比较id和username 一致时才返回true 之后再去比较 hashCode
81 if(user.id == this.id && user.username.equals(this.username)) return true;
82 }
83 return false;
84 }
85
class Student
{
int num;
String name;
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public int hashCode()
{
return num*name.hashCode();
}
public boolean equals(Object o)
{
Student s=(Student)o;
return num==s.num && name.equals(s.name);
}
public String toString()
{
return num+":"+name;
}
}
分享到:
相关推荐
### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...
这种基于值的 Equal 方法可以由 Java 类库中的所有原始封装类使用。 为什么忽略 equals() 和 hashCode() 会带来问题 如果我们忽略 equals() 和 hashCode() 方法,那么我们将不能可靠地检索相关的值,除非我们在 ...
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
【面试】中提到的几个关键知识点集中在对象比较、equals()和hashCode()方法的使用以及它们之间的关系上。这些概念在Java编程中至关重要,特别是在处理集合类和比较对象时。 1、**hashCode与equals两者之间的关系**...
Java中的`hashCode`方法是Java编程语言中的一个重要概念,它主要与对象的散列处理相关。在Java的`Object`类中定义了一个本地方法(native)`hashCode()`,该方法返回一个`int`类型的数值。这个数值是根据对象的状态...
字符串哈希码 字符串的其他实用程序。... equal ( code , code2 ) ;原料药hashCode(str)参数: str:字符串对象返回: 编号:哈希码返回字符串的哈希码。 请注意,哈希码对于特定字符串是不可变的。执照麻省理工学院
ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...
* 43B:类中定义了 hashCode() 方法,但是没有重写 java.lang.Object 中的 hashCode() 方法 * 44C:类中定义了 tostring() 方法,但是没有重写 java.lang.Object 中的 tostring() 方法 * 45C:某些方法名只有大小写...
PS:本文使用jdk1.7解析1.Object类 的equals 方法 代码如下: /** * Indicates whether some other object is “equal to” this one. * * The {@code equals} method implements an equivalence relation * on ...
2、为什么改写equals()的时候,总是要改写hashCode() 两个原则: hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回...
空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void setStringValue(String sIn){...}按照以下方式设计Java类:2个私有数据成员double DoubleValue ; int IntValue; 空构造函数定义公共...
在Java编程语言中,`equals()` 和 `hashCode()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...
在这个个人总结中,我们将探讨几个关键的Java知识点,包括对象创建、equals与hashCode方法、对象序列化以及String、StringBuffer和StringBuilder的区别。 首先,让我们来看看创建Java对象的四种方式: 1. **New**...
本文将详细探讨如何实现这个过程,重点在于重写`hashCode`和`equals`方法,以及利用`Collections`工具类和自定义比较器来实现多属性排序。 首先,让我们了解`hashCode`和`equals`方法的重要性。这两个方法是Java中...
同时,为了保持哈希表的正确性,重写 `equals()` 时通常也需要重写 `hashCode()` 方法。 ```java @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || ...
首先我们看下下面代码及输出和String重写equals和hashcode的源码: package com.zzy.test; public class Test6 { public static void main(String[] args) { String s1="aaa"; String s2="aaa"; String s3=new ...
本文将深入探讨`equals`方法的使用方法、重写注意事项以及与`hashCode`方法的关系。 ### Q1. 何时应该重写`equals`方法? 在需要比较对象的值而不是引用时,应重写`equals`方法。默认情况下,`equals`方法使用`==`...
sun公司开源的jar包,里面封装了log4的日志以及关于自动生成hashcode代码以及重写equal方法的jar
equals() 方法和 hashCode() 方法是 Object 类中的两个重要方法。equals() 方法用于比较两个对象是否相等,而 hashCode() 方法用于返回对象的哈希值。它们的区别在于: * 如果两个对象相等(equal),那么他们一定...