compareTo方法如何在此处逐个排序对象

时间:2015-10-23 07:12:05

标签: java collections

我无法理解如何在语句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("");

        }

    }  
}

2 个答案:

答案 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"