Java compareTo方法在这里如何逐个排序对象

Java compareTo方法在这里如何逐个排序对象,java,collections,Java,Collections,我无法理解在语句this.User.compareTo(arg0.User)中如何比较两个对象。我想知道比较对象的流程,比如在比较“arg0”时“this”指的是什么 public class Other implements Comparable<Other>{ // making objects of this class public String User; public String Pass; public String getUser() {

我无法理解在语句this.User.compareTo(arg0.User)中如何比较两个对象。我想知道比较对象的流程,比如在比较“arg0”时“this”指的是什么

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); 
    }


}
public类其他实现可比较{//生成该类的对象
公共字符串用户;
公共字符串通行证;
公共字符串getUser(){
返回用户;
}
公共void setUser(字符串用户){//getter和setter
用户=用户;
}
公共字符串getPass(){
回程通行证;
}
公共无效设置传递(字符串传递){
通过=通过;
}
@凌驾
public int compareTo(其他arg0){//重写为comapre对象
//TODO自动生成的方法存根
返回this.User.compareTo(arg0.User);//这里的对象比较方式与“this”类似
//在集合中传递列表时引用。排序(列表);
}
}

这是主课

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("");

        }

    }  
}
import java.util.*;
公开课演示
{
公共静态void main(字符串[]args)
{
Other a=新建Other();//创建对象
a、 User=“farma”;
a、 Pass=“123”;
其他a1=新的其他();
a1.User=“arma”;
a1.Pass=“123”;
其他a2=新的其他();
a2.User=“brma”;
a2.Pass=“123”;
列表=新的ArrayList();
列表.添加(a);
增加(a1);
增加(a2);
Collections.sort(list);//排序
(其他:名单){
System.out.println(other.User+“”+other.Pass);//打印值
System.out.println(“”);
}
}  
}
写入该行时,将比较用户对象的值并返回结果

即将
,指向当前实例,当您将其他传递给此方法时,它将在当前实例上调用该方法,该方法与传递的对象
用户
进行比较

如果你看到

public class Other implements Comparable<Other>{  // making objects of this class
    public String User;
public类其他实现可比较{//生成该类的对象
公共字符串用户;
在另一个类中有一个名为
User
的字符串对象

因此,排序取决于用户的名称

编辑:

Other o1 = new Other();
o1.setUser("Tim Biegeleisen");
Other o2 = new Other();
o2.setUser("Suresh Atta");
System.out.println(o1.compareTo(o2));

当您对集合使用sort方法时,在所有委托发生之后,它使用。查看要检查的算法。

您的
Other
类中的
User
对象实际上是一个
String
变量(尽管您使用了大写,这是误导性的)。因此,
Other.compareTo()
正在使用Java
String
类中的
compareTo()
方法。它将属于
Other
对象实例的
User
字符串(因此
this
操作符)与另一个
Other
对象进行比较

String.compareTo()
方法按字母顺序比较两个字符串,并返回以下内容(请参阅):

如果参数是一个按字典顺序等于此字符串的字符串,则值为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”

Collections.sort(列表);这里是我传递用户的对象,即在列表中??那么哪个对象将首先传递a、a1、a2??以及当前实例在此时扮演的角色。@Dani必须始终有to对象要检查。一个是当前对象,另一个是要检查的对象。在排序过程中,每个实例将与其他实例一起检查,并按照它们的顺序左右移动。您可以检查所附的排序源代码,看看algo是如何为您修复糟糕的代码格式的。您能帮助确保您了解Java命名约定的基础知识吗?字段名以大写字母开头,类名以小写字母开头会让人困惑简单地回答您的问题:您看不到
compareTo()
方法被直接使用,因为它是使用它的
集合.sort()
的内部逻辑。您不应该也不应该关心它的调用方式,只要您有一个保证:“如果您可以在
比较()中提供比较两个
其他
的逻辑,
Colleciton.sort()
将能够为您对集合进行排序“我将负责命名约定……感谢您告诉meSO这将按如下方式工作:-------在第一次迭代中------------this.User{farma}.compareTo(arg0.User{farma})----------------------------this.User{farma}.compareTo(arg0.User{barma})-----------------------this.User{farma}.compareTo(arg0.User{arma})