Jer*_*y B 29 java compareto comparable
我正在学习数组,基本上我有一个收集姓氏,名字和分数的数组.
我需要编写一个compareTo方法来比较姓氏和名字,以便列表可以按字母顺序从姓氏开始排序,然后如果两个人的姓氏相同,那么它将对第一个名称进行排序.
我很困惑,因为我书中的所有信息都是比较数字,而不是对象和字符串.
这是我到目前为止编码的内容.我知道这是错的,但它至少解释了我认为我在做什么:
public int compare(Object obj) // creating a method to compare
{
Student s = (Student) obj; // creating a student object
// I guess here I'm telling it to compare the last names?
int studentCompare = this.lastName.compareTo(s.getLastName());
if (studentCompare != 0)
return studentCompare;
else
{
if (this.getLastName() < s.getLastName())
return - 1;
if (this.getLastName() > s.getLastName())
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道<和>符号是错误的,但就像我说我的书只告诉你如何使用compareTo.
Eug*_*sky 24
这是比较字符串的正确方法:
int studentCompare = this.lastName.compareTo(s.getLastName());
Run Code Online (Sandbox Code Playgroud)
这甚至不会编译:
if (this.getLastName() < s.getLastName())
Run Code Online (Sandbox Code Playgroud)
请
if (this.getLastName().compareTo(s.getLastName()) < 0)改用.
所以要比较你需要的拳头/姓氏顺序:
int d = getFirstName().compareTo(s.getFirstName());
if (d == 0)
d = getLastName().compareTo(s.getLastName());
return d;
Run Code Online (Sandbox Code Playgroud)
Edw*_*rzo 18
compareTo方法描述如下:
将此对象与指定的对象进行比较以获得顺序.返回负整数,零或正整数,因为此对象小于,等于或大于指定对象.
假设我们想按照他们的年龄比较Jedis:
class Jedi implements Comparable<Jedi> {
private final String name;
private final int age;
//...
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我们的绝地比所提供的更早,你必须返回一个积极的,如果他们是相同的年龄,你返回0,如果我们的绝地年轻,你返回负面.
public int compareTo(Jedi jedi){
return this.age > jedi.age ? 1 : this.age < jedi.age ? -1 : 0;
}
Run Code Online (Sandbox Code Playgroud)
通过实现该compareTo方法(来自Comparable界面),您可以定义所谓的自然顺序.默认情况下,JDK中的所有排序方法都将使用此排序.
在某些情况下,您可能希望将比较基于其他对象,而不是基本类型.例如,copare Jedis基于他们的名字.在这种情况下,如果要比较的对象已经实现,Comparable那么您可以使用其compareTo方法进行比较.
public int compareTo(Jedi jedi){
return this.name.compareTo(jedi.getName());
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下会更简单.
现在,如果你想使用名称和年龄作为比较标准,那么你必须决定你的比较,优先级是什么.例如,如果两个Jedis的名称相同,那么您可以使用它们的年龄来决定哪个先行,哪个先行.
public int compareTo(Jedi jedi){
int result = this.name.compareTo(jedi.getName());
if(result == 0){
result = this.age > jedi.age ? 1 : this.age < jedi.age ? -1 : 0;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果你有一组Jedis
Jedi[] jediAcademy = {new Jedi("Obiwan",80), new Jedi("Anakin", 30), ..}
Run Code Online (Sandbox Code Playgroud)
您所要做的就是要求班级java.util.Arrays使用其排序方法.
Arrays.sort(jediAcademy);
Run Code Online (Sandbox Code Playgroud)
此Arrays.sort方法将使用您的compareTo方法逐个对对象进行排序.
| 归档时间: |
|
| 查看次数: |
151395 次 |
| 最近记录: |