簡體   English   中英

在Java中對元素的通用數組進行排序

[英]Sorting a generic array of elements in Java

我的Java程序中有一個通用類,類型可以是Double或Integer。 我需要編寫一個函數,該函數首先需要對通用類型的值數組進行排序。 我收到以下異常,並且不確定如何解決。 我將不勝感激任何幫助。

Exception in thread "main" java.lang.NullPointerException
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
    at java.util.Arrays.sort(Arrays.java:472)
    at datastructures.CircularBuffer.getMedian(CircularBuffer.java:98)
    at test.CircularBufferTests.test4(CircularBufferTests.java:67)
    at test.CircularBufferTests.main(CircularBufferTests.java:13)

這是我的代碼:

public class CircularBuffer<T extends Number> {

private T[] array;

public CircularBuffer(int n){
        array = (T[])new Number[n];
    }

public double getMedian(int size){


        ...
            Arrays.sort(array);
        ...

    }
}

謝謝!

顯然,這里沒有足夠的代碼來理解,但是對於您將T傳遞到的ComparableTimSort(實際上是異常的來源)類,並不是您傳遞的所有T類型(Number類)都實現Comparable接口,以便檢查這是否是您的問題,請嘗試通過可比的類型轉換將T傳遞給您

您必須編寫一個自定義的Comparator才能使用Arrays.sort()進行排序。

Arrays.sort(array, yourComparator);

你可以做

  1. vhax建議什么。 進一步來說

     Arrays.sort(array, new Comparator<T>{ @Override public int compare(T arg0, T arg1) { ... } }); 
  2. 瘋狂的像素建議,更具體地

     public class CircularBuffer<T extends Number & Comparable<T>> 

這樣,您將T限制得更具體。 這稱為“多重界限” http://docs.oracle.com/javase/tutorial/java/generics/bounded.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM