TreeSet
1、元素有序,这里的顺序是指存储和取出的顺序,按照一定的规则进行排序,排序的方式取决于 构造函数,如果传入的是无参,那么就是自然排序。如果传入的是带参,就是按照比较器的方法进行排序
2、没有带索引的方法,所以只能使用增强for 或者迭代器
3、不包含重复元素
自然排序代码如下
package day37;
import java.util.TreeSet;
public class TreeSetDemo01 {
public static void main(String[] args) {
//创建集合对象
//只能使用引用类型,所以不能使用int 要用Integer
TreeSet<Integer> ts = new TreeSet<Integer>();
//添加元素
ts.add(10); //jdk5h后会自动装箱
ts.add(12);
ts.add(8);
for(Integer i : ts){
System.out.println(i);
}
}
}
使用比较器排序,需要重写compareTo,注意重写的时候要考虑到所有的条件
package day37;
//如果要比较器,需要实现比较器接口
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name = name;
this.age =age;
}
public String getName(){ return name; }
public void setName(String name){ this.name = name;}
public int getAge(){ return age; }
public void setAge(int age){this.age = age;}
//需要重写comparable接口
@Override
public int compareTo(Student s) {
//如果返回是0,默认会是同一个元素
//return 0;
//如果是1,就是比较存储顺序比较,而不是值.反之如果-1 就是反向存储顺序
//return 1;
//按照年龄.要升序this放前面,如果降序this放后面
int num = this.age - s.age;
//比对如果年龄相同, 名字是否相同
int num2 = num == 0? this.name.compareTo(s.name):num;
return num2;
}
}
package day37;
import java.util.TreeSet;
public class TreeSetDemo02 {
public static void main(String[] args) {
//创建集合对象
TreeSet<Student> ts = new TreeSet<Student>();
//创建对象
Student s1 = new Student("A",10);
Student s2 = new Student("C",40);
Student s3 = new Student("B",30);
Student s4 = new Student("D",20);
Student s5 = new Student("E",20);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
for(Student s:ts){
System.out.println(s.getName()+','+s.getAge());
}
}
}
#第二种写法,只是把Comparator接口的重写放在实例化的代码中
package day37;
//如果要比较器,需要实现比较器接口
public class Student{
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name = name;
this.age =age;
}
public String getName(){ return name; }
public void setName(String name){ this.name = name;}
public int getAge(){ return age; }
public void setAge(int age){this.age = age;}
//需要重写comparable接口
}
package day37;
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo03 {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num = s1.getAge()-s2.getAge();
int num2 = num == 0? s1.getName().compareTo(s2.getName()):num;
return num2;
}
});
Student s1 = new Student("A",10);
Student s2 = new Student("C",40);
Student s3 = new Student("B",30);
ts.add(s1);
ts.add(s2);
ts.add(s3);
//遍历集合
for(Student s:ts){
System.out.println(s.getName()+","+s.getAge());
}
}
}