2015-03-02 72 views
-1

这是一个非常基本的例子,我只使用了现有的方法。ArrayList的问题

import java.util.ArrayList; 

public class A { 

    public static void main(String[] args) { 
     ArrayList<Integer> al = new ArrayList<Integer>(); 
     // This should create an ArrayList of initial capacity 10 
     al.add(3,5); // Add 5 at index 3 
     al.add(7,2); // Add 2 at index 7 
     al.add(9,6); // Add 6 at index 9 
     System.out.println(al); 
    } 
} 

然而,它抛出以下异常:

异常线程 “main” java.lang.IndexOutOfBoundsException:指数:3,大小:0

我不知道为什么抛出异常。它对我来说看起来完全合法。

+1

你不能在任意点添加。直到数组结尾http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add (int,%20E) – 2015-03-02 18:35:45

+0

即使我做'trimToSize()' – Boyyett 2015-03-02 18:36:01

+0

我猜[List#add()API](http://docs.oracle.com/javase/8/docs/api/java/util/List.html#add-int-E - )应该提供足够的提示.. – 2015-03-02 18:36:28

回答

2

您不能将索引3处的值添加到空列表中。数组列表的容量是底层数组的大小;索引仍然必须在实际添加到数组列表的项目范围内。

+0

好的,那么他们如何期望我们使用带有两个参数的add方法?只想覆盖现有的值? – Boyyett 2015-03-02 18:37:51

+0

带两个参数的add()不会覆盖现有的值。它可以用于在列表中已有其他值之前添加值。 – yole 2015-03-02 18:39:04

+0

好的,重载删除功能如何?如果我们正在处理整数,它如何知道我们是否想要在该索引处删除具有该值或整数的整数? – Boyyett 2015-03-02 18:54:31

0

该容量并不意味着有10个空的插槽,您可以分配您的值。这不是ArrayList应该如何工作的。只有当索引介于0和list.size-1之间时,才能将值列入列表中,这就是为什么你会得到异常。

+0

好吧,如何重载删除功能?如果我们正在处理整数,它如何知道我们是否想要在该索引处删除具有该值或整数的整数? – Boyyett 2015-03-02 18:54:54

+0

它将以int位置取出元件或将它移除与整数值的元件。有区别。 – Lamorak 2015-03-02 18:59:44

1

有关文件是here

注意,它指定引发的异常如果索引大于阵列...的尺寸,该尺寸从容量不同越大。

+0

好的,重载删除功能如何?如果我们正在处理整数,它如何知道我们是否想要在该索引处删除具有该值或整数的整数? – Boyyett 2015-03-02 18:54:26

+0

呃,你让我在那里。也许你应该问另一个问题。 – 2015-03-02 18:56:33

+0

好吧,我只是不想通过在同一主题上启动不同的主题来发送垃圾邮件。 – Boyyett 2015-03-02 18:58:40

0

您的代码会尝试找到index = 3处的元素,以便它可以将其移动到下一个位置。然而,它不能找到它,因为那里没有元素。

0

查看附加官方的文档(INT指数,E元素) 它抛出java.lang.IndexOutOfBoundsException:如果索引超出范围(索引< 0 ||指数>尺寸())

检查你的案例是否满足条件?

这将工作

ArrayList<Integer> al = new ArrayList<Integer>(); 
    // This should create an ArrayList of initial capacity 10 
    al.add(0,5); // Add 5 at index 0 
    al.add(1,2); // Add 2 at index 1 

    System.out.println(al); 

你的情况下,大小()是0,所以你不能直接在al.add(3,5)把