黑马程序员技术交流社区
标题:
integer和String的问题
[打印本页]
作者:
潘际昌
时间:
2013-11-23 14:56
标题:
integer和String的问题
本帖最后由 潘际昌 于 2013-11-24 00:53 编辑
import java.util.*;
public class Test
{
public static void main(String[] args) {
TreeSet<Student> ts=new TreeSet<Student>(new myComparator());
ts.add(new Student("zhangsan1",20,97));
ts.add(new Student("zhangsan2",21,99));
ts.add(new Student("zhangsan5",25,95));
ts.add(new Student("zhangsan3",19,98));
ts.add(new Student("zhangsan7",15,90));
Iterator<Student> it = ts.iterator();
while(it.hasNext())
{
Student s= it.next();
System.out.println(s.getName()+","+s.getAge()+","+s.getScore());
}
}
}
class myComparator implements Comparator<Student>
{
public int compare(Student s1,Student s2)
{
int num=new Integer(s1.getScore()).compareTo(new Integer(s2.getScore()));
if(num==0)
{
return s1.getName().compareTo(s2.getName());
}
return num;
}
}
class Student
{
String name;
int age;
int score;
Student(String name,int age,int score)
{
this.name=name;
this.age=age;
this.score=score;
}
String getName()
{
return name;
}
int getAge()
{
return age;
}
int getScore()
{
return score;
}
}比较器里面,为什么 s1.getName().compareTo(s2.getName());字符型可以直接比较,而int型
int num=new Integer(s1.getScore()).compareTo(new Integer(s2.getScore()));还需要new Interger()呢?
作者:
ζ丶凡σ
时间:
2013-11-23 15:08
字符串就是对象,可以直接compareTo进行比较,int型是基本数据类型,得装箱成Integer对象类型,才可以用compareTo进行比较,所以要new Ingeger()
API里面compareTo(T o) 方法
比较此对象与指定对象的顺序。
作者:
低调的奢华
时间:
2013-11-23 15:14
楼上已经给出了解释,还有既然是int型为什么要用comparTo来比较呢
int num = s1.getScore()-s2.getScore();
return num==0? s1.getName().compareTo(s2.getName()):num;
复制代码
这样不就行了
作者:
quan23355
时间:
2013-11-23 15:15
String类和Integer类中都有compareTo方法,Integer类中的compareTo方法是在数字上比较两个 Integer 对象,String类中的compareTo方法是按字典顺序比较两个字符串。这里是因为自定义比较器,且是按成绩排序, return num=new Integer(s1.getScore()).compareTo(new Integer(s2.getScore()));是返回成绩大小,如果成绩相等则按姓名字典顺序排序,即return s1.getName().compareTo(s2.getName());
作者:
小痞痞
时间:
2013-11-23 15:16
getName中的compareTo调用的是String里边的compareTo方法
而int类型的没有compareTo方法只有Integer类型的才有而int和Integer的自动拆箱和自动装箱是在-128-127之间 因为你比较的是变量jvm无法判断是不是能自动转换 所以要用new Integer()来进行比较
一般的int和Integer类型的直接相减就行了啊 干嘛还要使用compareTo方法呢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2