2013-02-13 38 views
0

我的代码如下:无法理解可比性,比较

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?

+1

你为什么要做这样的事情?即使有可能,比自己编写比较逻辑更容易使用'compareTo'吗? – 2013-02-13 09:51:17

+1

尝试首先在此处了解区别:http://javarevisited.blogspot.com/2011/06/comparator-and-comparable-in-java.html和here :: http://stackoverflow.com/questions/1440134/java-what-the-the-difference-between-implementation-comparable-and-comparator – 2013-02-13 09:54:56

+1

你不能用==来比较对象。它只会比较对象的参考而不是实际值。只有原始变量可以使用==来比较它的值。 – basiljames 2013-02-13 10:00:09

回答

0

有没有这样的逻辑来比较两个字符串而不需要调用compareTo

那么你可以写一些代码做与String.compareTo一样的事情。 (而且也没有什么神秘的它:看看例如在OpenJDK源代码)

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