2016-03-07 33 views
0

我正在學習Java並編寫了QuickSort類。在某些時候,需要交換陣列中的元素,所以我試圖用Collections.swap這樣做,推薦使用Collections.swap,例如in this question。然而,javac QuickSort.java我拋出一個錯誤:錯誤:交換(對象[],int,int)在集合中有私人訪問

error: swap(Object[],int,int) has private access in Collections

什麼我錯在這裏做什麼?完整的代碼爲QuickSort.java

package src.sort; 

import java.util.Collections; 

public class QuickSort { 
    public static void sort(Comparable[] xs) { 
     sort(xs, 0, xs.length); 
    } 

    private static boolean less(Comparable x, Comparable y) { 
     return x.compareTo(y) < 0; 
    } 

    private static void sort(Comparable[] xs, int fst, int lst) { 
     if (fst >= lst) return; 

     int i = fst, j = lst; 

     Comparable pivot = xs[(i + j)/2]; 

     while (i <= j) { 
      while (less(xs[i++], pivot)); 
      while (less(pivot, xs[j--])); 

      if (i <= j) Collections.swap(xs, i++, j--); 
     } 

     sort(xs, fst, j); 
     sort(xs, i, lst); 
    } 
} 

回答

3

錯誤很明顯。您不能調用該方法,因爲它是一種私有方法,只能在Collections類中使用。編寫自己的方法很容易,它可以和這個簡單的方法具有相同的功能。

鏈接問題中建議的交換方法是一種公用方法,它可以交換列表中的兩個元素 - public static void swap(List<?> list, int i, int j)。您嘗試調用的方法是一種不同的方法,它交換數組中的兩個元素,並且它是私有的 - private static void swap(Object[] arr, int i, int j)

+0

那麼它是如何來用於[我鏈接的問題](http://stackoverflow.com/questions/15963549/arraylist-swap-elements?lq=1)? – alisianoi

+3

@ all3fox'swap(列表 list,int i,int j);'是public而'swap(Object [] arr,int i,int j)'是私有的。 – Eran

+0

thx,現在我明白了 – alisianoi

相關問題