看视频不懂
还有0人有此问题
发表在Java视频课程答疑 2017-06-15
是否精华
版块置顶:

public class Peoper implements Comparable {
 int id;
 int age;
 String name;

 public Peoper(int id, int age, String name) {
  super();
  this.id = id;
  this.age = age;
  this.name = name;
 }

 @Override
 public String toString() {
  return "Peoper [id=" + id + ", age=" + age + ", name=" + name + "]";
 }

 @Override
 public int compareTo(Object o) {
  Peoper p;
  if (o instanceof Peoper) {
   p=(Peoper)o;
  }else {
   return -1;//-1表示传入的参数比我本身要小
  }
  int diff=this.id-p.id;
  if(diff!=0){
   diff=diff/Math.abs(diff);
  }
 return diff;
 }

}





import java.awt.List;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

import javax.swing.plaf.synth.SynthScrollBarUI;

public class Demo {
 public static void main(String[] args) {
  Set set=new TreeSet();
  Peoper P1=new Peoper(1, 18, "小明");
  Peoper P2=new Peoper(2, 5, "大壮");
  Peoper P3=new Peoper(3, 20, "阿强");
  set.add(P1);
  set.add(P2);
  set.add(P3);
  Iterator it=set.iterator();
  while (it.hasNext()) {
   System.out.println(it.next());
   
  }
 
 }

}

上面是两个class,主要是compareTo方法这里看不懂,在Peoper类里这个方法是重写了吧,我不明白为什么这样重写,第一个if和第二个if的功能是啥?还有我尝试不重写,就是方法体力出值写了return 0,结果在Demo运行的时候就只输出了集合的第一个元素,这为啥?还有就是这个compareTo到底在哪里运行了,Demo里没有调用,Peoper里也没有main方法啊?

分享到:
精彩评论 1
David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2017-06-16
沙发

(1)首先解释下为什么要重写?

以上面的代码为例,Peoper类是自定义类,如果把自定义类的对象存入TreeSet进行排序,那么必须实现Comparable接口,实现Comparable接口时,就需要重写compareTo方法。

(2)然后解释下if的功能?

第一个if用来判断传入的Object类的对象o是否是Peoper类型,如果是,将对象o强制转换为Peoper类型;第二个if用来比较对象的id,根据id的大小决定Peoper对象的大小,id越大,那么Peoper对象就越大(升序排列)。

(3)接着解释下return 0返回的是什么?

两个Object类的对象obj1和obj2进行比较(obj1.compareTo(obj2)),如果返回0,表明这两个对象相等;如果返回一个正整数,表明obj1大于obj2;如果返回一个负整数,表明obj1小于obj2。

(4)最后解释下compareTo到底在哪里运行了?

因为TreeSet可以保证集合中的元素处于排序状态,所以,在输出TreeSet中的元素时,就默认执行了compareTo方法。

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照