/*
*TreeSet:此处简单实现了将自定义对象存入二叉树结构集合的实例。存入二叉树结构集合的元素,必须具备比较性,或者集合本身具备比较器。
*
*对象具备比较性通过其类实现Comparable接口来实现,集合具备比较器通过传入一个Comparator接口的实例对象来实现。若两者同时存在,以比较器的方式为主。
*/
package classfile;
import java.util.*;
public class TreeSetDemo
{
public static void main(String[] args)
{
//TreeSet<Person> ts = new TreeSet<Person>();//通过对象自身的比较方法进行排序
TreeSet<Person> ts = new TreeSet<Person>(new PersonComparator());//通过比较器的方式进行排序
ts.add(new Person("zhangsan01",22));
ts.add(new Person("zhangsan02",21));
ts.add(new Person("zhangsan03",20));
ts.add(new Person("zhangsan01",20));
ts.add(new Person("zhangsan03",22));
ts.add(new Person("zhangsan01",22));//重复元素
for(Iterator<Person> iterator = ts.iterator();iterator.hasNext();)
{
Person p = iterator.next();
System.out.println("TreeSet集合中的元素:"+p.getName()+"..."+p.getAge());
}
}
}
/**
*此类实现了Comparable接口,其对象具备了比较性。
*/
class Person implements Comparable<Person>
{
private String name;
private int age;
/**
*创建一个Person对象。
*
*param name
* 指定对象的姓名
*param age
* 指定对象的年龄
*/
public Person(String name,int age)
{
this.name = name;
this.age = age;
}
/**
*用于获取对象的姓名。
*
*return
* 返回对象的姓名
*/
public String getName()
{
return name;
}
/**
*用于获取对象的年龄
*
*return
* 返回对象的年龄
*/
public int getAge()
{
return age;
}
/**
*重写了Comparable接口的compareTo方法,通过对象的age进行主要排序,通过对象的name进行次要排序。
*
*param p
* 一个Person的实例对象
*return
* 返回比较的结果
*/
public int compareTo(Person p)
{
System.out.println(this.getName()+"...compareTo..."+p.getName());//查看此方法的被调用行为
if(this.age>p.age)
{
return 1;
}
if(this.age==p.age)
{
return this.name.compareTo(p.name);
}
return -1;
//return this.name.compareTo(p.name);
}
}
/**
*此类实现了Comparator接口,可以根据Person对象的name进行主要排序,通过对象的age进行次要排序。
*/
class PersonComparator implements Comparator<Person>
{
/**
*重写了Comparator的compare方法。
*
*param p1
* 申请存入集合中的元素
*param p2
* 集合中的元素
*return
* 返回两个对象比较的结果
*/
public int compare(Person p1,Person p2)
{
System.out.println(p1.getName()+"...compare..."+p2.getName());//查看此方法被调用的行为
int number = p1.getName().compareTo(p2.getName());
if(number>0)
{
return 1;
}
if(number==0)
{
return Integer.valueOf(p1.getAge()).compareTo(p2.getAge());
}
return number;
}
}
TreeSet
最新推荐文章于 2018-06-19 08:36:17 发布