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

xiaoxiao2021-02-28  45

复习笔记 [第三季]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; } }
转载请注明原文地址: https://www.6miu.com/read-1100062.html

最新回复(0)