我无法理解如何在语句this.User.compareTo(arg0.User)中比较两个对象。我想知道比较对象的流程,比如当比较“arg0”时“this”指的是什么。 / p>
public class Other implements Comparable<Other>{ // making objects of this class
public String User;
public String Pass;
public String getUser() {
return User;
}
public void setUser(String user) { //getter and setter
User = user;
}
public String getPass() {
return Pass;
}
public void setPass(String pass) {
Pass = pass;
}
@Override
public int compareTo(Other arg0) { // overriding to comapre objects
// TODO Auto-generated method stub
return this.User.compareTo(arg0.User); //here how objects are compared like what "this "
//refers here when we are passing list in Collections.sort(list);
}
}
这是主要的课程
import java.util.*;
public class demo
{
public static void main(String[] args)
{
Other a=new Other(); //creating objects
a.User="farma";
a.Pass="123";
Other a1=new Other();
a1.User="arma";
a1.Pass="123";
Other a2=new Other();
a2.User="brma";
a2.Pass="123";
List<Other> list=new ArrayList<Other>();
list.add(a);
list.add(a1);
list.add(a2);
Collections.sort(list); //sorting
for (Other other : list) {
System.out.println(other.User+" "+other.Pass); //printing values
System.out.println("");
}
}
}
答案 0 :(得分:3)
return this.User.compareTo(arg0.User);
当您编写该行时,您正在比较用户对象并返回结果。
指向当前实例的this
,当您将Other传递给此方法时,它将调用当前实例,该实例与传递的对象User
进行比较。
如果您看到
的签名public class Other implements Comparable<Other>{ // making objects of this class
public String User;
在其他类中有一个名为User
的String对象。
因此,排序取决于用户的名称。
修改:
在集合上使用排序方法时,在所有委托发生后,它使用Sorting algorithms。查看要检查的算法。
答案 1 :(得分:1)
User
类中的Other
对象实际上是一个String
变量(尽管你使用大写,这是误导性的)。因此,Other.compareTo()
正在使用Java compareTo()
类中的String
方法。它将属于User
实例的this
字符串(因此Other
运算符)与另一个Other
对象进行比较。
String.compareTo()
方法以lexigraphically方式比较两个字符串,并返回以下内容(请参阅documentation):
如果参数是一个按字典顺序排列等于该字符串的字符串,则值为0;如果参数是按字典顺序大于此字符串的字符串,则小于0的值;如果参数是一个按字典顺序小于该字符串的字符串,则值大于0。
示例:强>
Other o1 = new Other();
o1.setUser("Tim Biegeleisen");
Other o2 = new Other();
o2.setUser("Suresh Atta");
System.out.println(o1.compareTo(o2));
这将输出值1
,因为字符串"Tim Biegeleisen"
按字典顺序更大而不是字符串"Suresh Atta"
。