[第三季]11.在TreeSet中添加自定义对象

复习笔记
[第三季]11.在TreeSet中添加自定义对象
1.TreeSet里添加Person
注意:
class Person
{

}
Person后面不用加括号().
①先创建TreeSet里面添加3个Person New.
②创建Class Person定义两个参数,分别是名称,年龄.
定义构造函数,并设置2个参数.
定义Print函数打印name和age,其中使用字符串格式化方法.
③用add方法新建三个,这里可以使用alt+ctrl+向下箭头进行快速的复制。再用迭代器穿件指针it,并打印里面的所有内容.迭代器里

面放的是String.
④使用Person继承与Comparable,并实现排序方法.
这个时候会出现错误,javastudy.Person cannot be cast to java.lang.Comparable,说明Person是没有办法进行比较的,解决方

法是在person后面加上“class Person implements Comparable”
这个时候又出现了错误,我们看看:
The type Person must implement the inherited abstract method Comparable.compareTo(Person)
这说明继承了之后需要重写一下compareTo(Person)这个函数,以确定Person的排序方法.
我们根据提示点击Add unimplement method,并根据o.age进行排序,里面用到了if语句.

⑤回到第①步那里打印结果看看. 结果是
javastudy.Person@15db9742
javastudy.Person@6d06d69c
javastudy.Person@7852e922
这是各个对象的物理地址,这个不是我们想要的.
⑥在Person里面重写toString方法,把name和age传回去,这就可以了.再次打印,结果满意.
名字:lala,年龄:20
名字:lblb,年龄:21
名字:lclc,年龄:22
⑦定义一个Dog类,定义名称和重量.
定义构造函数,设置名称和重量.
重写toString方法,这里可以使用String.format方法来格式化字符串,并返回字符串.
2.TreeSet 添加Dog
①实例化一个TreeSet,里面存放着Dog累,并存放在dg这个实例里.
②使用迭代器遍历打印,知识与上面的iterator相同.但是这里会出错,因为Dog是没有办法排序的,这里的知识与上节课的知识相呼

应,TreeSet里面的东西是要先进行排序,否则无法使用iterator的next和hasnext功能.
知识补充:迭代器是一种设计模式,它是一种对象,它可以遍历选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通

常被称为”轻量级”对象,因为创建它的代价小.
③在main的外面写一个class MyCom 继承与Comparator.
里面重写compare方法,传入Dog o1, Dog o2两个变量,返回值是name的比较值(字符串和数值都是可以进行比较的).
④在实例化dg的地方,传入比较器new TreeSet(new MyCom()).
⑤用add方法加入new Dog,注意和Dog函数相对应.
⑥回到第②步的迭代器那里进行打印,查看一下结果.

package javastudy;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class Test2 
{

    public static void main(String[] args) 
    {

        TreeSet<Person>ts=new TreeSet<Person>();
        ts.add(new Person("jack",20));
        ts.add(new Person("mary",18));
        ts.add(new Person("jc",10));


        Iterator<Person>it=ts.iterator();
        while(it.hasNext())
        {

            //****************第1步出现错误****************
            //****************.Person cannot be cast to java.lang.Comparable
            Person p=it.next();
            p.print();
        }



        //****************第6步****************
        TreeSet<Dog>dg=new TreeSet<Dog>(new MyCom());
        //****************第9步上面new MyCom(),目的是传入比较器的对象****************
        dg.add(new Dog("maomao", 18));
        dg.add(new Dog("niuniu", 16));
        dg.add(new Dog("lala", 21));


        //****************第7步****************
        Iterator<Dog>it2=dg.iterator();
        while(it2.hasNext())
        {
            System.out.println(it2.next());
        }
        //接下来报错 javastudy.Dog cannot be cast to java.lang.Comparable
    }

}
//****************第8步****************
class MyCom implements Comparator<Dog>
{

    @Override
    public int compare(Dog o1, Dog o2) 
    {
        return o1.name.compareTo(o2.name);
    }  

}

//****************第2步implements Comparable<Person>****************
class Person implements Comparable<Person>
{
    String name;
    int age;
    Person(String name,int age) 
    {
        this.name=name;
        this.age=age;
    }

    void print()
    {
        System.out.println(String.format("姓名=%s,年龄=%d", name,age));
    }
    //****************第3步****************
    @Override
    public int compareTo(Person o) 
    {
        if(this.age>o.age)
        {
            return 1;
        }else if (this.age<o.age) 
        {
            return -1;
        }else 
        {
            return 0;
        }

    }
}

//****************第5步****************
class Dog
{
    String name;
    int weight;
    Dog(String name,int weight) 
    {
        this.name=name;
        this.weight=weight;
    }
    @Override
    public String toString() 
    {
        return "Dog name=" + name + ", weight=" + weight;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值