JAVA系列 03:Java HashSet
下面两段代码主要是调试:java中去除重复对象数据
// 1. Set集合针对String 类型和8大基础数据类型 过滤掉重复数据
Set<String> nameSet = new HashSet<>();
nameSet.add("张三");
nameSet.add("李四");
nameSet.add("王五");
nameSet.add("张三");
// 输出结果 张三 李四 王五
for (String name : nameSet) {
CLog.i(TAG, name);
CLog.i(TAG, "------------");
}
// List集合去除重复基础数据
List<String> nameList = new ArrayList<String>();
nameList.add("张三");
nameList.add("李四");
nameList.add("王五");
nameList.add("赵六");
nameSet.addAll(nameList);
for (String name : nameSet) {
CLog.i(TAG, name);
}
// 去除编号和用户名一样的 对象,需要重写 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<>();
userSet.add(admin);
userSet.add(user);
userSet.add(admin1);
userSet.add(user1);
for (User users : userSet) {
CLog.i(TAG, "users.username: " + users.username + " users.id: " + users.id);
}
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();
}
}