当前位置: 代码迷 >> J2SE >> 新手,代码一些看不懂
  详细解决方案

新手,代码一些看不懂

热度:87   发布时间:2016-04-23 20:03:55.0
新手求助,代码一些看不懂

import java.util.Arrays;
import java.util.Comparator;
 
class Dog{
    int size;  
    public Dog(int s){
        size = s;
    }
}
 
class DogSizeComparator implements Comparator<Dog>{
 
    @Override
    public int compare(Dog o1, Dog o2) {
        return o1.size - o2.size;
    }
}
 
public class ArraySort {
 
    public static void main(String[] args) {
        Dog d1 = new Dog(2);
        Dog d2 = new Dog(1);
        Dog d3 = new Dog(3);
 
        Dog[] dogArray = {d1, d2, d3};
        printDogs(dogArray);
 
        Arrays.sort(dogArray, new DogSizeComparator()); //请问这一句new DogSizeComparator()写在这里是什么意思?
//为什么会输出1 2 3。请问是怎么算的?
        printDogs(dogArray);
    }
 
    public static void printDogs(Dog[] dogs){
        for(Dog d: dogs)
            System.out.print(d.size + " " );
 
        System.out.println();
    }
}


输出
2 1 3
1 2 3 //为什么会输出1 2 3。请问是怎么算的?
------解决思路----------------------
实现了Comparator接口,就可以进行 Arrays.sort 排序了,给你看下源码把

  public static <T> void sort(T[] a, Comparator<? super T> c) {
T[] aux = (T[])a.clone();
        if (c==null)
            mergeSort(aux, a, 0, a.length, 0);
        else
            mergeSort(aux, a, 0, a.length, 0, c);
    }

private static void mergeSort(Object[] src,
  Object[] dest,
  int low,
  int high,
  int off) {
int length = high - low;

// Insertion sort on smallest arrays
        if (length < INSERTIONSORT_THRESHOLD) {
            for (int i=low; i<high; i++)
                for (int j=i; j>low &&
 ((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
                    swap(dest, j, j-1);
            return;
        }


就是一个比较排序
------解决思路----------------------
这个是源码,看下就明白了,你实现了Comparator<Dog>接口
private static void mergeSort(Object[] src,
  Object[] dest,
  int low, int high, int off,
  Comparator c) {
int length = high - low;

// Insertion sort on smallest arrays
if (length < INSERTIONSORT_THRESHOLD) {
    for (int i=low; i<high; i++)
for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
    swap(dest, j, j-1);
    return;
}

------解决思路----------------------
eclipce F3 看看源码有好处~
  相关解决方案