2015-10-31 111 views
2

我試圖使用ArrayList的內置Java方法將ArrayList轉換爲數組。但是,問題在於Java將數組轉換爲一個類型對象數組。我試圖將其轉換爲類型T(泛型)的數組。我試着將類類傳入類的構造函數中,使用它來投射數組,但我沒有運氣。我的代碼如下。任何幫助,將不勝感激:將泛型列表轉換爲具有泛型類型的數組

公共類QuickSelect>擴展排序實現選擇{

Class<T> t; // for class type 

QuickSelect(Class<T> t){ 
    this.t = t; 
} 

@Override 
public T select(T[] data, int n, int k) { 

    if(data.length == 0) return null; 
    if(k == 1) return data[0]; 
    if(k >= n || k <=0) return null; 

    Random randomGenerator = new Random(); 

    int pivotPosition = randomGenerator.nextInt(n-1); 
    T pivotValue = data[pivotPosition]; 

    ArrayList<T> lessThanPivot = new ArrayList<T>(); 
    ArrayList<T> equalToPivot = new ArrayList<T>(); 
    ArrayList<T> greatThanPivot = new ArrayList<T>(); 

    for(int i=0; i < n; i++){ 
     if(compare(pivotValue, data[i]) < 0) lessThanPivot.add(data[i]); 
     else if(compare(pivotValue, data[i]) == 0) equalToPivot.add(data[i]); 
     else greatThanPivot.add(data[i]); 

    } 
    Class<?> tClass = t.getClass(); 

    if(k <= lessThanPivot.size()) select(lessThanPivot.toArray(), lessThanPivot.size(), k); // this part of the code is where the issue is 

    return null; //don't worry about this for now 
    } 

} 
+0

不要擔心在某些地方返回null的方法..這是我的TODO – hadis

回答

2

有指定者的兩個版本()在ArrayList的方法 - 即得不到argumnets的一個,並返回對象的數組(您使用),另一種,是可以獲得作爲參數,你想它返回數組的類型:public <T> T[] toArray(T[] a)

,所以你需要使用這一塊,像這樣:lessThanPivot.toArray(data)

看到完整的Javadoc here

+0

哇謝謝。我不相信我不知道這種方法。 – hadis

2

如果我把你的問題的權利我sugget您使用List.toArray(T[])

例如,當代碼被編譯String[]array = list.toArray(new String[list.size()]);

泛型被刪除,因此helper.array只會返回一個對象[]。

我希望這會有所幫助。

+0

是的,謝謝你Moji。你有我的問題,Nir Levy基本上給了我相同的答案。這工作。 – hadis

+0

不用擔心兄弟:) – moji