繁体   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