Set集合中的——TreeSet的使用

一、使用TreeSet添加一个String类型的值:
//使用TreeSet添加指定元素
public static void TreeSet01(){
TreeSet treeSet=new TreeSet();
treeSet.add("java001");
treeSet.add("java01");
treeSet.add("java1");
treeSet.add("java015");
treeSet.add("java012");
treeSet.add("java001");

Iterator iterator = treeSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}

二、向TreeSet中添加对象并排序:
1.根据对象内容中的年龄排序:在使用TreeSet添加的对象的时候对象类必须实现Comparable接口实现compareTo方法

/**
* 根据年龄排序
*/
public static void Treeset1(){
TreeSet tree = new TreeSet();
tree.add(new Person("diaobao001", 21));
tree.add(new Person("diaobao001", 21));
tree.add(new Person("diaobao002", 21));
tree.add(new Person("diaobao003", 23));
tree.add(new Person("diaobao03", 24));
Iterator iterator = tree.iterator();
while (iterator.hasNext()) {
Person next = iterator.next();
System.out.println(next.getName()+" "+next.getAge());
}
}

上面使用的Person类:

//使用年龄排序
class Person implements Comparable{
private String name;
private int age;

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;
}

public int compareTo(Object arg0) {
if (!(arg0 instanceof Person)) {
throw new RuntimeException("类型转换错误");
}
Person arg02 = (Person) arg0;
if (this.age>arg02.age)
return 1;
else if(this.age==arg02.age){
return this.name.compareTo(arg02.name); //使用String类中的compareTo方法比较
}
else return -1;
}
}

2.根据名字排序:在之前排序添加对象的前提下重新编写排序方式的实现Comparator接口并实现方法

//根据名字排序
public static void treeset2(){
TreeSet tree = new TreeSet(new MyTreeSet());
tree.add(new Person("aiaobao001", 21));
tree.add(new Person("diaobao02", 21));
tree.add(new Person("biaobao01", 21));
tree.add(new Person("diaobao013", 21));
tree.add(new Person("ciaobao011", 21));
tree.add(new Person("diaobao003", 23));
tree.add(new Person("diaobao03", 24));
Iterator iterator = tree.iterator();
while (iterator.hasNext()) {
Person next = iterator.next();
System.out.println(next.getName()+" "+next.getAge());
}
}

上面使用到的MyTreeset类

/**
 * 在使用了Comparable接口的年龄排序前提下重新改用姓名排序
 * @author Administrator
 * 当元素自身不具备比较性,或者具备的比较性不是所需要的。
 *这时需要让容器自身具备比较性
 *定义了比较器,将比较器对消作为参数传递给TreeSet集合的构造函数。
 *当两种排序都存在时,以比较器为主
 *
 *定义一个列实现comparator接口,覆盖compare方法
 * */
class MyTreeSet implements Comparator{


public int compare(Object arg0, Object arg1) {
Person p1= (Person) arg0;
Person p2 = (Person) arg1;
int nuber = p1.getName().compareTo(p2.getName());
if (nuber==0)
return new Integer(p1.getAge()).compareTo(p2.getAge()); //使用了Integer类中CompareTo方法比较内容
return nuber;
}

按照上面顺序调用main方法:

public static void main(String[] args) {
TreeSet01();
System.out.println("-------------------");
Treeset1();
System.out.println("-----------------------------------------");
treeset2();
}

最后输出内容:
java001
java01
java012
java015
java1
-------------------
diaobao001 21
diaobao002 21
diaobao003 23
diaobao03 24
-----------------------------------------
aiaobao001 21
biaobao01 21
ciaobao011 21
diaobao003 23
diaobao013 21
diaobao02 21
diaobao03 24

你可能感兴趣的:(Java内容)