目录
前言:
本文适合搞java的大学生以及行业小白观看。需要有一定的基础
去重原理:
*重复判定:根据比较器的比较方法来进行判定,如果比较结果为0,则是同一个对象。
*删除是通过比较器来删除,如果返回为0就开始删除。 * 利用TreeSet来比较对象会报错因为只支持可以自然排序的,除非实现对象的比较接口
代码展示:
测试类:
public class TreeSetDemo1 {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
set.add("2");
set.add("3");
set.add("1");
System.out.println(set);
TreeSet<User> set1 = new TreeSet<>();
User user=new User(1,"三上哟呀");
User user1 = new User(2, "jh");
User user2=new User(3,"波多野结衣");
set1.add(user);
set1.add(user1);
set1.add(user2);
System.out.println(set1);
}
User类:
public class User implements Comparable<User>{
int i;
String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return i == user.i && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(i, name);
}
public User(int i, String name) {
this.i = i;
this.name = name;
}
@Override
public String toString() {
return "User{" +
"i=" + i +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(User o) {
return name.charAt(0)-o.name.charAt(0);
}
}
这样就可以实现对象的排序了。
高级玩法:
改变比较器方法:
@Override
public int compareTo(User o) {
return name.charAt(1)-o.name.charAt(0);
}
}
因为改变了比较器方法,所以现在电脑是以集合里的对象的第二个字符与集合里的下一个对象的第一个字符进行比较。
使用删除方法:
set1.remove(new User(6,"gj"));
结果展示:
删除后:
是不是很nb。
同理:我们现在可以让集合里的元素重复了。