关于Set的简单使用可以参考 集合的简单使用
TreeSet的使用
Tree是有序的,按照一定的规则进行排序,也可以自定义排序规则,自定义排序规则有2种方法
创建TreeMap时指定排序器
此时的排序器需要实现 Comparator 接口,接口中需要定义排序规则
import java.util.*;
public class SetTest {
static class BaseData{
protected Integer age;
protected String name;
public BaseData(String name, Integer age){
this.age = age;
this.name = name;
}
@Override
public String toString(){
return "(" + this.name + ", " + this.age + ")";
}
}
public static void treeSetTest1(){
TreeSet<BaseData> treeSet1 = new TreeSet(new Comparator() {
@Override
public int compare(Object o, Object t1) {
if(o == null && t1 == null)
return 0;
if(o == null || t1 == null)
return -1;
if(o instanceof BaseData && t1 instanceof BaseData){
BaseData d1 = (BaseData) o;
BaseData d2 = (BaseData) t1;
if(d1.age > d2.age)
return 1;
else if(d1.age == d2.age)
return 0;
else
return -1;
}
return -1;
}
});
treeSet1.add(new BaseData("依依", 23));
treeSet1.add(new BaseData("双儿", 15));
treeSet1.add(new BaseData("伞伞", 18));
treeSet1.add(new BaseData("丝丝", 13));
System.out.println(treeSet1);
}
public static void main(String[] args){
treeSetTest1();
}
}
执行结果:
[(丝丝, 13), (双儿, 15), (伞伞, 18), (依依, 23)]
集的值所属的类定义排序器
值所属的类需要实现 Comparable 接口去定义排序规则
import java.util.*;
public class SetTest {
static class BaseData{
protected Integer age;
protected String name;
public BaseData(String name, Integer age){
this.age = age;
this.name = name;
}
@Override
public String toString(){
return "(" + this.name + ", " + this.age + ")";
}
}
static class Data extends BaseData implements Comparable{
public Data(String name, Integer age){
super(name, age);
}
@Override
public int compareTo(Object o) {
if(o == null)
return -1;
if(o instanceof Data){
Data data = (Data) o;
if(this.age > data.age)
return 1;
else if(this.age == data.age)
return 0;
else
return -1;
}
return -1;
}
}
public static void treeSetTest2(){
TreeSet<BaseData> treeSet1 = new TreeSet();
treeSet1.add(new Data("依依", 23));
treeSet1.add(new Data("双儿", 15));
treeSet1.add(new Data("伞伞", 18));
treeSet1.add(new Data("丝丝", 13));
System.out.println(treeSet1);
}
public static void main(String[] args){
treeSetTest2();
}
}
执行结果:
[(丝丝, 13), (双儿, 15), (伞伞, 18), (依依, 23)]