黑马程序员技术交流社区
标题:
比较器中的比较条件问题[已解决]
[打印本页]
作者:
王自强
时间:
2012-8-30 21:43
标题:
比较器中的比较条件问题[已解决]
本帖最后由 王自强 于 2012-8-31 15:19 编辑
import java.util.*;
class Person implements Comparable
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name==p.name && this.age==p.age;
}
public int hashCode()
{
return this.name.hashCode()+this.age*33;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Person))
throw new RuntimeException();
Person p = (Person)obj;
int num = this.name.compareTo(p.name);
if(num == 0)
return (this.age-p.age);
//return new Integer(this.age).compareTo(new Integer(p.Age));
//这两句有什么区别吗?
return num;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return this.age;
}
}
class demo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new myCompare());
ts.add(new Person("abc",34));
ts.add(new Person("zzt",44));
ts.add(new Person("ace",44));
ts.add(new Person("hhh",54));
ts.add(new Person("ace",16));
ts.add(new Person("zrt",24));
for(Iterator it = ts.iterator();it.hasNext();)
{
Person p = (Person)it.next();
sop(p.getName()+"::"+p.getAge());
}
}
}
class myCompare implements Comparator
{
public int compare(Object obj1,Object obj2)
{
Person p1 = (Person)obj1;
Person p2 = (Person)obj2;
int num = p1.getAge()-p2.getAge();
//int num = new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
//这两句有什么区别吗?
if(num == 0)
return p1.getName().compareTo(p2.getName());
return num;
}
}
复制代码
作者:
周兴华
时间:
2012-8-30 22:03
本帖最后由 周兴华 于 2012-8-30 22:04 编辑
return (this.age-p.age);
//return new Integer(this.age).compareTo(new Integer(p.Age));
//这两句有什么区别吗?
int是基本数据类型,Integer是int的包装类,Integer类实现了Comparable接口,因此Integer可调用compareTo方法,下面的代码也是同理。
int num = p1.getAge()-p2.getAge();
//int num = new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
//这两句有什么区别吗?
作者:
王金科
时间:
2012-8-31 15:12
int num = p1.getAge()-p2.getAge();
int num = new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
这两句都表示两个对象年龄值的大小.第一句采用了数学减法的形式进行了比较,值有三种情况,等于0,小于0大于0
第二句采用的是compareTo方法进行比较,因为Integer具有该方法,这里把int型数据装箱成了Integer类型
这两者的效果一样
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2