Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArrayList Java的数组_Java_Arrays_Arraylist - Fatal编程技术网

ArrayList Java的数组

ArrayList Java的数组,java,arrays,arraylist,Java,Arrays,Arraylist,我正在创建包含多个队列的PriorityQueue。我使用一个数组来存储组成不同优先级队列的多个ArrayList。以下是迄今为止我的构造函数的内容: ArrayList<ProcessRecord> pq; ArrayList[] arrayQ; MultiList(){ arrayQ = new ArrayList[9]; pq = new ArrayList<ProcessRecord>(); } 似乎不起作用。我是否正确声明了A

我正在创建包含多个队列的PriorityQueue。我使用一个数组来存储组成不同优先级队列的多个ArrayList。以下是迄今为止我的构造函数的内容:

ArrayList<ProcessRecord> pq;
ArrayList[] arrayQ;

  MultiList(){       
   arrayQ = new ArrayList[9];
   pq = new ArrayList<ProcessRecord>();
 }
似乎不起作用。我是否正确声明了
ArrayList
的数组?我一直收到一个错误,说
this.arrayQ[I].size()
不是一个方法。(问题出在.size()上)

谢谢你的帮助


David

您需要进行一些空检查。for循环假定它可以对其中的某些内容进行操作,但如果对null元素调用.size()方法,则该方法无效,它将抛出NullPointerException

您的循环也会有一些问题。数组索引从0开始,而不是从1开始。循环从1开始,由于您使用它来访问数组,因此将从第二个元素开始,并尝试访问超出数组范围的1个元素,这将引发ArrayIndexOutofBoundsException。

一些问题:

首先,Java中的数组是零索引的,因此循环应为:

for (int i = 0; i < 9; i++)

同样值得注意的是:我不知道你在做什么,但是为什么你要混合
数组
数组列表
?这几乎肯定是一个糟糕的设计决策,最好使用
ArrayList


我看到您通过使用
ArrayList
数组而不是
ArrayList
来解决固有的设计故障,但这不是类型安全的,您应该使用正确的集合类型。

虽然我不认为这是问题的原因,for循环将完全跳过数组中的第一个元素,并在结束时抛出ArrayIndexOutOfBoundsException。Java数组是零索引的,因此9元素数组的有效索引是0到8。为什么不只使用一个数组或一个堆来实现PriorityQueue呢?我在过去的赋值中都使用了这两种方法,这一个应该是多个优先级队列,并以最大优先级循环方式为每个队列输出它们。正如前面所指出的,设计本身是有缺陷的。我只是在遵循教授制定的模板。从1开始而不是从0开始处理数组的原因是它使以后的输出更简单。有缺陷是的,但在这一点上不可避免。不过,我确实喜欢使用array.length。感谢您提供有关空指针引用的信息。数组的初始化循环是我所需要的。我还添加了一些错误检查,以确保被引用的元素不为null。谢谢你的帮助!Noob问题,但你所说的合适的收藏类型Stefan是什么意思?编程不是我主要关注的领域(计算机工程是我的专业),但我真的希望更好地理解正确的技术。使用列表而不是数组来强化你试图实现的语义。对于数组,将编译array[i]=new ArrayList()。如果使用列表而不是数组,则无法编译。理想情况下,您可以尽早捕获软件错误,如果您可以在编译时捕获这样的错误,那么您应该努力实现这一点。现在开始工作,在添加循环初始化数组中的每个元素时,它会被清除。可能是IDE错误?可能需要指定
arrayQ
中包含的
ArrayList
实例的类型参数,请考虑:
ArrayList[]arrayQ=(ArrayList[])Array.newInstance(ArrayList.class,9)。这样,从
arrayQ
ArrayList
元素访问
ProcessRecord
将不需要额外的类型转换。
for (int i = 0; i < 9; i++)
for (int i = 0; i < arrayQ.length; i++)
    arrayQ[i] = new ArrayList<ProcessRecord>();