TreeSet的使用
TreeSet用法
TreeSet可以用于元素进行排序及保证元素唯一
。
如果类的对象集合或者是数组要进行排序,则可以实现 Comparable 接口,或者new TreeSet的时候传入自定义的比较方法,实现自定义的排序
。
public class TreeSetTest {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet();
// 自定义对象比较
treeSet.add(new Person("张三", 7));
treeSet.add(new Person("李四", 888));
treeSet.add(new Person("王五", 99));
treeSet.add(new Person("方六", 7));
System.out.println(treeSet);
// 输出 [Person{name='张三', age=7}, Person{name='方六', age=7}, Person{name='王五', age=99}, Person{name='李四', age=888}]
// compareTo比较的是字符的大小,char的值
System.out.println("张三".compareTo("李四"));
System.out.println("------------------------------");
// 元素也可以通过传入比较的方法,实现自定义的比较
TreeSet treeSet2 = new TreeSet(new CompareByLen());
treeSet2.add("id");
treeSet2.add("name");
treeSet2.add("location");
System.out.println(treeSet2);
// 输出 [id, name, location]
}
static class CompareByLen implements Comparator<String> {
@Override
public int compare(String s1, String s2) { //按照字符串的长度比较
int num = s1.length() - s2.length(); //长度为主要条件
return num == 0 ? s1.compareTo(s2) : num; //内容为次要条件
}
}
}
Person类如下
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(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;
}
@Override
public int compareTo(Person p) {
int num = this.age - p.age;// 年龄,第一个比较条件
return num == 0 ? this.name.compareTo(p.name) : num;// 如果年龄相等,再比较名字
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
如有错误,还请多多指教!
转载或者引用本文内容请注明来源及原作者:橘足轻重;