Treeset集合使用

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);
    }

}

}

你可能感兴趣的:(Treeset集合使用)