当前位置: 代码迷 >> 综合 >> hashcode equal方法
  详细解决方案

hashcode equal方法

热度:99   发布时间:2023-12-08 01:12:19.0
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;
}
}
  相关解决方案