【问题标题】:Unable to understand Comparable and Comparator无法理解 Comparable 和 Comparator
【发布时间】:2013-01-28 19:47:38
【问题描述】:

我的代码如下:

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

PersonSort.java

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

PersonDetails.java

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

在 PersonSort.java 中,我们使用 compareTo 来比较两个字符串。当我们比较两个整数时,有什么替代方法吗?例如下面比较两个员工 ID:

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

有没有这样的逻辑可以在不调用 compareTo 的情况下比较两个字符串?

【问题讨论】:

  • 你到底为什么想做这样的事情?即使有可能,使用compareTo 不是比自己编写比较逻辑更容易吗?
  • 您不能使用== 来比较对象。它只会比较对象引用而不是实际值。仅对于原始变量,您可以使用== 来比较其值。
  • 最好的文章java tutorial
  • 您的标题似乎与您的问题不符;代码没有提到 Comparable。 Person 是否打算实现 Comparable(这是我所期望的)而不是 Comparator(PersonSort 已经实现了)?

标签: java comparator comparable


【解决方案1】:

有没有这样的逻辑可以在不调用compareTo的情况下比较两个字符串?

你可以写一些代码做和String.compareTo一样的事情。 (它的作用并不神秘:例如查看 OpenJDK 源代码。)

但是这样做没有意义。现有的 String 方法比您的自定义代码更快,因为 String 方法可以直接访问字符串对象的私有状态。

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多