Set集合判断对象重复的方法
Posted zhy-study
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Set集合判断对象重复的方法相关的知识,希望对你有一定的参考价值。
Set<User> userSet = new HashSet<>(); User user1= new User("aa","11"); User user2= new User("aa","11"); userSet.add(user1); userSet.add(user2); System.out.println("set size"+userSet.size()); Iterator iterator = userSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next().toString()); }
创建两个相同的对象 没有重写对象的equals方法和hashcode方法 默认使用object的。并且依次添加到set中,成功添加了两个
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(username, user.username) && Objects.equals(pwd, user.pwd); } @Override public int hashCode() { return Objects.hash(username, pwd); }
重写方法之后只添加成功了一个对象 set的大小为1
如果只是重写equals方法 不重写hashcode方法 set中任然有两个对象 并且hashcode不同,set集合区分两个对象是否相同是使用hashcode值进行区分的。
Object类的equals方法 :比较两个对象是否是同一个引用 java.lang.Object
public boolean equals(Object obj) { return (this == obj); }
关于equals方法和hashcode方法。
注:String类型的equals方法 只比较内容 不比较是否来引用同一个对象
public static void main(String[] args) { Set<User> userSet = new HashSet<>(); User user1= new User("aa","11"); User user2= new User("aa","11"); userSet.add(user1); userSet.add(user2); System.out.println("set size"+userSet.size()); Iterator iterator = userSet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next().toString()); } System.out.println("equals?:"+user1.equals(user2)); System.out.println("user1:hashcode:"+user1.hashCode()); System.out.println("user2:hashcode:"+user2.hashCode()); } } class User{ String username; String pwd; public User(String username, String pwd) { this.username = username; this.pwd = pwd; } @Override public String toString() { return "User{" + "username=‘" + username + ‘‘‘ + ", pwd=‘" + pwd + ‘‘‘ + ‘}‘; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(username, user.username) && Objects.equals(user.pwd,pwd); } }
以上是关于Set集合判断对象重复的方法的主要内容,如果未能解决你的问题,请参考以下文章
Set集合,放的元素不能重复,请问它的判断重不重复是怎么实现的?
java怎么判断集合中是不是存在重复数据,如果存在怎么删除重复数据