黑马程序员技术交流社区
标题:
关于Comparator接口的问题
[打印本页]
作者:
官仁杰
时间:
2012-10-1 21:11
标题:
关于Comparator接口的问题
本帖最后由 官仁杰 于 2012-10-1 22:15 编辑
在毕老师的视频里有这么一段练习程序
import java.util.*;
class TreeSetTest
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new StrLenComparator());
ts.add("abcd");
ts.add("cc");
ts.add("cba");
ts.add("aaa");
ts.add("z");
ts.add("hahaha");
Iterator it = ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class StrLenComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(num==0)
return s1.compareTo(s2);
return num;
}
}
复制代码
我的问题是,实现接口不是应该重写接口里所有的方法吗?我查了API文档,
Comparator接口还有一个equals方法没有重写,为什么程序能通过呢
作者:
武庆东
时间:
2012-10-1 21:21
我的问题是,实现接口不是应该重写接口里所有的方法吗?我查了API文档,Comparator接口还有一个equals方法没有重写,为什么程序能通过呢?
解答:
因为类的基类是Object,所以类默认已经实现equlas()方法。你可以自己重写基类的equlas()方法,进行验证~
作者:
严海荣
时间:
2012-10-1 21:22
每个类默认继承自java.lang.Object, Object类有equals() 方法,所以子类中有equals()方法。
作者:
李玉生
时间:
2012-10-1 21:27
严海荣 发表于 2012-10-1 21:22
每个类默认继承自java.lang.Object, Object类有equals() 方法,所以子类中有equals()方法。 ...
回答的很好
作者:
黑马-王燚
时间:
2012-10-2 01:11
实现接口是应该重写接口的所有方法,Comparator接口中也确实还有一个equals方法,但是我们要知道,
所有的类都继承了Object类,而Object类中有equals方法,所以 从Object中继承过来的equals方法就重写了Comparator接口中的equals方法了,
class StrLenComparator implements Comparator
{
//这里其实省略了这样的一句话
// public boolean equals(Object obj) {} 这个方法 extends Object
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(num==0)
return s1.compareTo(s2);
return num;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2