服务器之家

服务器之家 > 正文

利用Java Set 去除重复object的方法

时间:2020-07-29 14:23     来源/作者:jingxian

实例如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
/**
 * 编写者:CP
 * <br />类描述:set集合针对String 类型和8大基础数据类型 过滤掉重复数据,如果存放的是其他类型对象,则需要重写hashCode方法和equals方法,当equals 比较相等时,则会去比较hashCode值 hashCode的值 如果一致的话,则不会存进set
 */
public class SetDemo {
    
    public static void main(String[] args) {
        Set<String> nameSet = new HashSet<String>();
        nameSet.add("张三");
        nameSet.add("李四");
        nameSet.add("王五");
        nameSet.add("张三");
        
        // 输出结果 张三  李四  王五
        for(String name : nameSet){
            System.out.print(name + "\t");
        }
        // List集合去除重复基础数据
        List<String> nameList = new ArrayList<String>();
        nameList.add("张三");
        nameList.add("李四");
        nameList.add("王五");
        nameList.add("赵六");
        nameSet.addAll(nameList);
        
        // 输出结果 张三  李四  王五  赵六
        for(String name : nameSet){
            System.out.print(name + "\t");
        }
        
        // 去除编号和用户名一样的 对象,需要重写 equals 方法 和 hashCode方法
        User admin = new User(1, "admin");
        User user = new User(2, "user");
        User user1 = new User(2, "user");
        User admin1 = new User(3, "admin");
        
        
        Set<User> userSet = new HashSet<User>();
        userSet.add(admin);
        userSet.add(user);
        userSet.add(admin1);
        userSet.add(user1);
        // 输入结果 admin1  admin3  user2
        for(User u : userSet){
            System.out.print(u.username + u.id + "\t");
        }
        
        System.out.println(user.equals(null));
    }
}
 
class User{
    
    protected Integer id;
    
    protected String username;
    
    public User(Integer id, String username){
        this.id = id;
        this.username = username;
    }
 
 
    /**
     * 如果对象类型是User 的话 则返回true 去比较hashCode值
     */
    @Override
    public boolean equals(Object obj) {
        if(obj == null) return false;
        if(this == obj) return true;
        if(obj instanceof User){
            User user =(User)obj;
//          if(user.id = this.id) return true; // 只比较id
            // 比较id和username 一致时才返回true 之后再去比较 hashCode
            if(user.id == this.id && user.username.equals(this.username)) return true;
            }
        return false;
    }
 
 
 
    /**
     * 重写hashcode 方法,返回的hashCode 不一样才认定为不同的对象
     */
    @Override
    public int hashCode() {
//      return id.hashCode(); // 只比较id,id一样就不添加进集合
        return id.hashCode() * username.hashCode();
    }
 
    
}

以上这篇利用Java Set 去除重复object的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
返回顶部