有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Comparator接口如何工作以及如何在内部调用compare()方法

简要解释Comparator接口在内部是如何工作的,它是如何通过JVM调用compare()方法的。收藏中。sort()方法我们将第一个参数作为Employee对象的列表传递,另一个参数传递NameComparator类对象,该类对象正在实现Comparator方法,以升序形式缩短Employee的名称。所以我想知道,实际上compare()方法是如何调用这两个参数作为Employee对象的。因为我们没有调用compare()方法。以及其他概念,比如它实际上是如何在内部工作的。下面是一段代码

public class Test
{
    public static void main(String[] args)
    {
    List<Employee> list = new ArrayList<Employee>();
    list.add(new Employee("Manish"));
    list.add(new Employee("Amit"));
    list.add(new Employee("Krishna"));

    // passing the list of employee obj and NameComparator class object.
    Collections.sort(list, new NameComparator());

    System.out.println(list);
    }
}

class Employee
{
    String name = null;

    public Employee(String name)
    {
    this.name = name;
    }

    @Override
    public String toString()
    {
    return this.name;
    }
}

class NameComparator implements Comparator<Employee>
{
    @Override
    public int compare(Employee o1, Employee o2)
    {
    Employee emp1 = (Employee) o1;
    Employee emp2 = (Employee) o2;
    return emp1.name.compareTo(emp2.name);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    发件人:http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html

    “排序算法是一种改进的mergesort(在这种算法中,如果低位子列表中的最高元素小于高位子列表中的最低元素,则忽略合并)。该算法提供有保证的n log(n)表演这个实现将指定的列表转储到一个数组中,对数组进行排序,并在列表上迭代,从数组中的相应位置重置每个元素。这避免了因尝试对链表进行适当排序而导致的n2日志(n)性能。"

    以下是排序代码:

    http://www.docjar.com/html/api/java/util/Collections.java.html