Java 无法理解可比和比较器
我的代码如下: Person.javaJava 无法理解可比和比较器,java,comparator,comparable,Java,Comparator,Comparable,我的代码如下: Person.java package com.example; import java.util.Comparator; public class Person implements Comparator<Person> { String name; int emp_id; public String getName() { return name; } public void setName(Str
package com.example;
import java.util.Comparator;
public class Person implements Comparator<Person> {
String name;
int emp_id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getEmp_id() {
return emp_id;
}
public void setEmp_id(int emp_id) {
this.emp_id = emp_id;
}
public Person(String name,int emp_id) {
this.name = name;
this.emp_id = emp_id;
}
}
package com.example;
import com.example.Person;
import java.util.*;
public class PersonSort implements Comparator<Person> {
public int compare(Person arg0, Person arg1) {
return arg0.getName().compareTo(arg1.getName());
}
}
package com.example;
import java.util.*;
public class PersonDetails {
public List<Person> enter() {
List<Person> list = new ArrayList<Person>();
list.add(new Person("D", 1));
list.add(new Person("A", 56));
list.add(new Person("G", 43));
list.add(new Person("C", 32));
return list;
}
public static void main(String[] args) {
PersonDetails details = new PersonDetails();
List<Person> list = details.enter();
Collections.sort(list, new PersonSort());
Iterator<Person> it = list.iterator();
while (it.hasNext()) {
Person p = it.next();
System.out.println(p.getName() + " " + p.getEmp_id());
}
}
}
有没有这样的逻辑可以在不调用compareTo的情况下比较两个字符串
有没有这样的逻辑可以比较两个字符串而不调用compareTo
您可以编写一些代码,它们与String.compareTo
做的事情相同。(它的作用并不神秘:例如,看看OpenJDK源代码。)
但这样做毫无意义。现有的String方法比您的自定义代码更快,因为String方法可以直接访问String对象的私有状态。您到底为什么要这样做?即使有可能,使用
compareTo
不是比自己编写比较逻辑更容易吗?请先在这里了解区别:这里::您不能使用=
来比较对象。它将只比较对象引用,而不是实际值。仅对于基本变量,您可以使用==
来比较其值;该守则没有提到可比性。Person应该实现Comparable(这是我所期望的)而不是Comparator(PersonSort已经实现的)?
public int compare(Person arg0, Person arg1) {
if (arg0.emp_id == arg1.emp_id)
return 0;
else if (arg0.emp_id > arg1.emp_id)
return 1;
else
return -1;
}