TreeSet集合
比较器通过重写Comparator方法来实现排序,他会有个默认的排序方法(自然排序)
自然排序:通过字母A~Z排序
重写后,则按照重写后的排序方式来排序
重写Comparator方法
Set<Teacher> t1 = new TreeSet<Teacher>(new Comparator<Teacher>() {
@Override
// 按照年龄排序
public int compare(Teacher o1, Teacher o2) {
int num = o1.age - o2.age;
int num2 = num == 0 ? o1.name.compareTo(o2.name) : num;
return num;
}
});
逐步拆解:Set<对象>对象名=new TreeSet<对象>(参数);
前面一直所用的是无参构造集合,现在我们使用有参构造
.
.
参数是一个Comparator比较器,比较Teacher类型
并且使用匿名内部类的特点,重写compare方法
new Comparator()
{
public int compare(Teacher o1, Teacher o2)
{…}
}
import java.util.*;
public class test1 {
public static void main(String[] args) {
// 使用匿名内部类
Set<Teacher> t1 = new TreeSet<Teacher>(new Comparator<Teacher>() {
@Override
// 按照年龄排序
public int compare(Teacher o1, Teacher o2) {
int num = o1.age - o2.age;
int num2 = num == 0 ? o1.name.compareTo(o2.name) : num;
return num;
}
});
Teacher t2 = new Teacher(100, "老妖婆");
Teacher t3 = new Teacher(99, "老巫婆");
Teacher t4 = new Teacher(10, "小鲜肉");
Teacher t5 = new Teacher(98, "老阴比");
t1.add(t2);t1.add(t3);t1.add(t4);t1.add(t5);
// 增强for循环输出
for (Teacher t:t1)
{
System.out.println(t.name+" "+t.age);
}
}
}
class Teacher {
Teacher(int a, String b) {
age = a;
name = b;
}
Teacher() {
age = 0;
name = "anonymous";
}
public int age;
public String name;
}
案例:实现1-1000的不重复随机数
import java.util.*;
import java.util.Random;
public class test1 {
public static void main(String[] args) {
Set<Integer> i1=new HashSet<Integer>();
Random r=new Random();
while (i1.size()!=100)
{
i1.add(new Integer(r.nextInt(1000)));
}
int i2=0;
for (Integer i:i1)
{
if (i2%10==0)
{
System.out.println();
}
System.out.print( i.intValue()+" ");
i2++;
}
}
}