avatar

初始化队列数组报NullPointerException异常

初始化队列数组Queue[] queues = new Queue[10];,报NullPointerException异常的解决方案

在做基数排序的实现上,因为需要用到队列,出现了一个小的问题,在此记录一下。

首先我需要用到一个队列数组(就是多个队列啦),但是搜到的很多都是用数组实现队列…开始的时候就是初始化一个数组,是队列的形式:

1
2

Queue[] queues = new Queue[10];

队列初始化后发现会报异常,

1
2
3
4

Exception in thread "main" java.lang.NullPointerException
at RadixSort_queue.radixsort(RadixSort_queue.java:51)
at RadixSort_queue.main(RadixSort_queue.java:14)

网上一搜还真有完全一样的问题…(一样的想实现基数排序,一样的分配大小,一样的报错….),但给到的答案是这样的,

1
2

You are missing something like queues[i] = new Queue(); before you can call queues[i].insert()... – assylias Jan 6 '14 at 15:43

但是如果直接使用的话,会报错

1
2

Error:(37, 25) java: java.util.Queue是抽象的; 无法实例化

先说正确的答案

1
2
3
4
5
6
7
8
9
10

// 队列存储
Queue[] queues = new Queue[10];

for(int i =0;i<queues.length;i++){
// 这两个都可以,队列的底层实现会有些许差别
// queues[i] = new PriorityQueue<>();
queues[i] = new ArrayDeque<>();

}

这里的的原因是Java是不能初始化Queue类型的,除非网上搜到的那个答案后的Queue是自己实现的一个类。在java.util.*里,接口用来接收实现类,Queue是接口,ArrayDeque是实现类,接口不能实例化,所以是不能直接new的,但是你可以new它的实现类,也就是像后面的new ArrayDeque()

Author: TheOutsider
Link: http://yoursite.com/2020/04/29/%E5%88%9D%E5%A7%8B%E5%8C%96%E9%98%9F%E5%88%97%E6%95%B0%E7%BB%84%E6%8A%A5NullPointerException%E5%BC%82%E5%B8%B8/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.