2015-03-02 98 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)把