Set集合中的——TreeSet的使用

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

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

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

/**
* 根据年龄排序
*/
public static void Treeset1(){
TreeSet<Person> tree = new TreeSet<Person>();
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<Person> 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<Person> tree = new TreeSet<Person>(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<Person> 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值