Treeset集合可以通过compare接口或者比较器Comparator的方法来实现去重以及排序
规则:
return 0去重
return 1 升序
return <0 降序
例如:
将集合中的人进行降序排列,并去掉重复的人信息
这道题可以采用三种方式解决
1、采用接口compare实现
import java.util.Objects;
public class Test5 implements Comparable{ //使用compare接口
private String name;
private int age;
public Test5(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Test5{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Test5 test5 = (Test5) o;
return age == test5.age &&
Objects.equals(name, test5.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public static void main(String[] args) {
}
@Override
//当传入集合中的值与集合中的值重复,则返回0,去重
当person的age属性差值为负,则降序排列,为正,则升序排列
public int compareTo(Test5 person) {
if(person.getName().equals(this.name))
return 0;
int i = person.getAge()-this.getAge();
return i;
}
}
//创建类为Test5类型的集合,用遍历的方式打印出集合
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Test7 {
public static void main(String[] args) {
Test5 T1 = new Test5(“厂长”, 25);
Test5 T2 = new Test5(“uzi”, 22);
Test5 T3 = new Test5(“zitai”, 24);
Test5 T4 = new Test5(“xiye”, 23);
Set set = new TreeSet<>();
set.add(T1);
set.add(T2);
set.add(T3);
set.add(T4);
for (Test5 s : set) {
System.out.println(s);
}
}
}
2、采用使用比较器Comparator的方法
//创建一个类采用比较器,然后采用三元比较,返回0去重,返回-1降序排列,返回1升序排列
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Test7 {
public static void main(String[] args) {
Test5 T1 = new Test5(“厂长”, 25);
Test5 T2 = new Test5(“uzi”, 22);
Test5 T3 = new Test5(“zitai”, 24);
Test5 T4 = new Test5(“xiye”, 23);
/new Test()/
Set set = new TreeSet<>(new Test());
set.add(T1);
set.add(T2);
set.add(T3);
set.add(T4);
for (Test5 s : set) {
System.out.println(s);
}
}
}
class Test implements Comparator{
@Override
public int compare(Test5 o1, Test5 o2) {
return o1.getName().equals(o2.getName()) ? 0:o2.getAge()-o1.getAge();
}
}
3、匿名类(建议使用,比较方便)
//直接在创建treeset集合中添加比较器,然后生成compare()方法,最后采用三元比较,返回0去重,返回-1降序排列,返回1升序排列
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Test7 {
public static void main(String[] args) {
Test5 T1 = new Test5(“厂长”, 25);
Test5 T2 = new Test5(“uzi”, 22);
Test5 T3 = new Test5(“zitai”, 24);
Test5 T4 = new Test5(“xiye”, 23);
Set set = new TreeSet<>(new Comparator() {
@Override
public int compare(Test5 o1, Test5 o2) {
return o1.getName().equals(o2.getName()) ? 0:o2.getAge()-o1.getAge();
}
});
set.add(T1);
set.add(T2);
set.add(T3);
set.add(T4);
for (Test5 s : set) {
System.out.println(s);
}
}
}