package Set;
import java.util.Comparator;
public class Per implements Comparable<Per> {
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Per{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
public Per(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public int compareTo(Per o) {
int n1 =this.getName().compareTo(o.getName());
int n2 =this.age-o.age;
return n1==0?n2:n1;
}
}
package Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
//添加元素。所添加的元素必须实现comparable接口,重写compareTo方法,在这里compareTo方法若返回值为0则认为是重复元素
TreeSet<Per> t1 =new TreeSet<>();
System.out.println("----------------添加元素------------------");
Per p1 =new Per(21,"棋棋");
Per p2 =new Per(22,"杨杨");
Per p3 =new Per(18,"瑶瑶");
Per p4 =new Per(20,"瑶瑶");
Per p5 =new Per(20,"杨杨");
t1.add(p1);
t1.add(p2);
t1.add(p3);
t1.add(p4);
t1.add(p5);
System.out.println("元素个数:"+t1.size());
System.out.println(t1);
//删除
System.out.println("----------------删除元素------------------");
t1.remove(new Per(21,"棋棋"));
System.out.println("元素个数:"+t1.size());
System.out.println(t1);
}
}
输出结果:
----------------添加元素------------------
元素个数:5
[Per{age=20, name='杨杨'}, Per{age=22, name='杨杨'}, Per{age=21, name='棋棋'}, Per{age=18, name='瑶瑶'}, Per{age=20, name='瑶瑶'}]
----------------删除元素------------------
元素个数:4
[Per{age=20, name='杨杨'}, Per{age=22, name='杨杨'}, Per{age=18, name='瑶瑶'}, Per{age=20, name='瑶瑶'}]
需要注意的是: TreeSet的元素必须实现comparable接口,重写compareTo方法。因为这个集合需要对元素进行排序。如不实现接口重写方法,需要像以下代码一样,用Comparator接口自定义比较器。
即如果元素不具有比较性,那么就要让容器具有比较性。如果两种都存在,优先使用容器比较。
package Set;
import java.util.Comparator;
import java.util.TreeSet;
public class demo {
public static void main(String[] args) {
TreeSet<Per> pers =new TreeSet<>(new Comparator<Per>() {
@Override
public int compare(Per o1, Per o2) {
int n1 = o1.getAge() - o2.getAge();
int n2 = o1.getName().compareTo(o2.getName());
return n1==0?n2:n1;
}
});
Per p1 =new Per(21,"棋棋");
Per p2 =new Per(22,"杨杨");
Per p3 =new Per(18,"瑶瑶");
Per p4 =new Per(20,"瑶瑶");
Per p5 =new Per(20,"杨杨");
pers.add(p1);
pers.add(p2 );
pers.add(p3);
pers.add(p4);
pers.add(p5);
System.out.println(pers);
}
}
class demo2{
public static void main(String[] args) {
TreeSet<String> t1 =new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int n1 =o1.length()-o2.length();
int n2 =o1.compareTo(o2);
return n1 ==0?n2:n1;
}
});
String[] a ={"ad","awdawf","adawd","ww","a","we","av","b"};
for (int i = 0; i < a.length; i++) {
t1.add(a[i]);
}
System.out.println(t1);
}
}