ArrayList Java的数组
我正在创建包含多个队列的PriorityQueue。我使用一个数组来存储组成不同优先级队列的多个ArrayList。以下是迄今为止我的构造函数的内容: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
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>();