我想使用ArrayList
来表示优先级队列。所以我想在ArrayList
的具体位置添加项目。但是当我运行它时,系统告诉我Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 0.
public class PriorityQueue
{
public ArrayList<String> Queue=new ArrayList<>();
public void enqueu(String s, int p)
{
Queue.add(p,s);
}
public void dequeu()
{
String temp=Queue.get(Queue.size()-1);
Queue.remove(temp);
}
public void print()
{
String[] print=new String[Queue.size()];
print=Queue.toArray(print);
for(int i=0;i<Queue.size();i++)
{
System.out.println(print[i]);
}
}
public static void main(String[] args)
{
PriorityQueue test= new PriorityQueue();
test.enqueu("x",10);
test.enqueu("Y",1);
test.enqueu("Z",3);
test.print();
}}
答案 0 :(得分:0)
因为add(int index, E element)
ArrayList
的{{3}}说:
将指定元素插入此列表中的指定位置。 移动当前位于该位置的元素(如果有)和任何元素 右边的后续元素(在索引中加一个)。
抛出:IndexOutOfBoundsException - 如果索引超出范围 (index&lt; 0 || index&gt; size())
你在做:
test.enqueu("x",10);
调用:
Queue.add(10,"x"); // "Queue" is the arrayList
您正在尝试将字符串添加到索引10,其中ArrayList的大小为0.这意味着,您正在尝试此操作,其中 index&gt;尺寸()即可。所以你得到IndexOutOfBoundsException
。
另外,请仔细考虑您的设计以及您应该做些什么。 Enqueue
不会以这种方式发挥作用。