Java compareTo方法在这里如何逐个排序对象
我无法理解在语句this.User.compareTo(arg0.User)中如何比较两个对象。我想知道比较对象的流程,比如在比较“arg0”时“this”指的是什么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() {
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()
正在使用JavaString
类中的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})