我看到它直接在这段代码中创建了一个 Comparator ,它可以成功运行,因为Comparator是一个接口而感到困惑。我能找到的所有例子都是实现Comparator接口的类。
public class Solution
{
private Comparator<ListNode> ListNodeComparator = new Comparator<ListNode>(){
public int compare(ListNode left, ListNode right) {
if (left == null) {
return 1;
} else if (right == null) {
return -1;
}
return left.val - right.val;
}
};
public ListNode mergeKLists(ArrayList<ListNode> lists)
{
if (lists == null || lists.size() == 0) {
return null;
}
Queue<ListNode> heap = new PriorityQueue<ListNode>(lists.size(), ListNodeComparator);
for (int i = 0; i < lists.size(); i++) {
if (lists.get(i) != null) {
heap.add(lists.get(i));
}
}
ListNode dummy = new ListNode(0);
ListNode tail = dummy;
while (!heap.isEmpty())
{
ListNode head = heap.poll();
tail.next = head;
tail = head;
if (head.next != null) {
heap.add(head.next);
}
}
return dummy.next;
}
}
答案 0 :(得分:3)
实际上,你在这里做的是创建一个匿名类,它实现了接口:
private Comparator<ListNode> ListNodeComparator = new Comparator<ListNode>(){ // here starts the implementation
@Override
public int compare(ListNode left, ListNode right) {
if (left == null) {
return 1;
} else if (right == null) {
return -1;
}
return left.val - right.val;
}
};
实际上与:
相同public class MyClass implementsComparator<ListNode>(){
@Override
public int compare(ListNode left, ListNode right) {
if (left == null) {
return 1;
} else if (right == null) {
return -1;
}
return left.val - right.val;
}
};
如果您只需要在一个类中使用该实现一次,则无需创建具有实现的单独类。
答案 1 :(得分:2)
它并没有直接创建比较器,而是anonymous class,其中创建了一个没有名称的类。这相当于:
class A implements Comparator<ListNode> {
@Override
public int compare(ListNode left, ListNode right) {
if (left == null) {
return 1;
} else if (right == null) {
return -1;
}
return left.val - right.val;
}
}
然后:
Comparator<ListNode> listNodeComparator = new A();