线程" main"中的例外情况java.lang.IndexOutOfBoundsException:Index:10,Size:0。JAVA

时间:2016-09-18 17:54:39

标签: java arraylist

我想使用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();
 }}

1 个答案:

答案 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不会以这种方式发挥作用。