java-----TreeSet实现自然排序

1,什么叫自然排序
Comparable接口,此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序
只有一个方法 int compareTo(T t)
该方法的返回值,有三种可能
负整数:小于指定对象
零:等于制定对象
正整数:大于制定对象
2,注意,一般情况下,不要add()null值,null其实是可以存放的,但是要避免出现空指针异常,这个问题是很容易出现的。如果不实现Comparator接口,那一定会报空指针异常,如果实现了Comparator接口,通过适当的写法,可以避免出现空指针异常,并且顺利将元素存入和取出
3,实例:
import java.util.TreeSet;

public class TreeSetDemo {
public static void main(String[] args){
//第一步:创建集合对象
TreeSet test =new TreeSet();
//第二步:创建集合元素
Integer i1=3;
Integer i2=2;
Integer i3=7;
Integer i4=5;
Integer i5=9;
Integer i6=4;
Integer i7=5;//重复值
Integer i8=null;
//第三步:向集合中添加元素
test.add(i1);
test.add(i2);
test.add(i3);
test.add(i4);
test.add(i5);
test.add(i6);
test.add(i7);
// test.add(i8);
/*
* 为啥存入null值会出错呢?
* null其实是可以存放的,但是要避免出现空指针异常,这个问题是很容易
* 出现的。如果不实现Comparator接口,那一定回报空指针异常,如果实现了
* Comparator接口,通过适当的写法,可以避免出现空指针异常,并且顺利将元素存入和取出
* */
//第四步,遍历集合
for(Integer item:test){
System.out.print(item);
System.out.print(",");
}
System.out.println("=自定义类型Student=======");
TreeSet test1=new TreeSet();
StudentDemo2 stu1=new StudentDemo2(“jerry”,20);
StudentDemo2 stu2=new StudentDemo2(“susan”,19);
StudentDemo2 stu3=new StudentDemo2(“peter”,18);
StudentDemo2 stu4=new StudentDemo2(“jerry”,18);
test1.add(stu1);
test1.add(stu2);
test1.add(stu3);
test1.add(stu4);
for(StudentDemo2 stu:test1){
System.out.println(“集合元素:”+stu);
}
}
}
+++++++++++++++++++++++++++++++
public class StudentDemo2 implements Comparable{

private String name;
private int age;

public StudentDemo2() {
    super();
}

public StudentDemo2(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 String toString() {
    return "StudentDemo2{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof StudentDemo2)) return false;

    StudentDemo2 that = (StudentDemo2) o;

    if (getAge() != that.getAge()) return false;
    return getName().equals(that.getName());
}

@Override
public int hashCode() {
    int result = getName().hashCode();
    result = 31 * result + getAge();
    return result;
}


/**
 * 只有实现了该方法,才能让Student的所有对象具有自然排序的属性
 */

@Override
public int compareTo(StudentDemo2 o) {
     /*
    * 两个对象谁大谁小自己定
    * 例如:下面是一种方案:
    * 只比较学生类的对象的年龄
    * 对象的年龄大了,我们就认为该对象
    * 另一种fangan如果比较两个对象的大小常见的方案逐个比较成员变量
    * 如果成员变量相等了,才需要进一步比较第二个成员变量
    * */
    //从小到大

// return this.age<o.age?-1:(this.ageo.age?0:1);
//从大到小
// return this.age<o.age?1:(this.age
o.age?0:-1);
int num=this.name.compareTo(o.name);
//如果名字已经比较出大小,就不需要再进一步的比较年龄了.
//否则名字相等的情况下,才需要进一步比较年龄
//从大到小
return num!=0?num:(this.age<o.age?1:(this.age==o.age?0:-1));
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值