我为以下代码获得了异常Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
。但无法理解为什么。
public class App {
public static void main(String[] args) {
ArrayList<String> s = new ArrayList<>();
//Set index deliberately as 1 (not zero)
s.add(1,"Elephant");
System.out.println(s.size());
}
}
我可以让它发挥作用,但我正在努力理解这些概念,所以我将声明改为下面,但也没有用。
ArrayList<String> s = new ArrayList<>(10)
答案 0 :(得分:6)
ArrayList索引从0开始(零)
您的数组列表大小为0,并且您在第一个索引处添加了String元素。如果不在第0个索引处添加元素,则无法添加下一个索引位置。这是错的。
所以,简单地把它作为
s.add("Elephant");
或者你可以
s.add(0,"Elephant");
答案 1 :(得分:5)
必须从0,1开始按顺序向ArrayList添加元素,依此类推。
如果您需要将元素添加到特定位置,您可以执行以下操作 -
String[] strings = new String[5];
strings[1] = "Elephant";
List<String> s = Arrays.asList(strings);
System.out.println(s);
这将产生sollowing输出
[null, Elephant, null, null, null]
答案 2 :(得分:4)
您的ArrayList
为空。有了这条线:
s.add(1,"Elephant");
您正在尝试在"Elephant"
(第二个位置)的索引1
处添加ArrayList
,这不存在,因此它会抛出IndexOutOfBoundsException
。
使用
s.add("Elephant");
代替。
答案 3 :(得分:1)
如果您真的想在索引1处使用“Elephant”,那么您可以在索引0处添加另一个(例如null)条目。
public class App {
public static void main(String[] args) {
ArrayList<String> s = new ArrayList<>();
s.add(null);
s.add("Elephant");
System.out.println(s.size());
}
}
或者将调用更改为.add
以在索引0处指定null,在索引1处指定elephant。
答案 4 :(得分:1)
适用于Android:
如果您需要使用会有很多差距的列表,最好在内存方面使用SparseArray
(ArrayList
会有很多null
个条目)。
使用示例:
SparseArray<String> list = new SparseArray<>();
list.put(99, "string1");
list.put(23, "string2");
list.put(45, "string3");
list.append()
,例如1,2,3,5,7,11,13 ...... list.put()
,例如100,23,45,277,42 ... 如果你的列表将有超过数百个项目,最好使用HashMap
,因为查找需要二进制搜索,并且添加和删除需要插入和删除数组中的条目。
答案 5 :(得分:0)
add(int index, E element)
API说,您的数组列表大小为零,并且您要向第一个索引添加元素
抛出:
IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())
改为使用boolean add(E e)
。
更新
我可以让它发挥作用,但我正在努力理解这些概念,所以我 将声明改为以下,但也没有奏效。
ArrayList<String> s = new ArrayList<>(10)
当您致电new ArrayList<Integer>(10)
时,您将列表的初始容量设置为10,而不是其大小。换句话说,当以这种方式构造时,数组列表的生命空白。
答案 6 :(得分:0)
ArrayList 不可自我扩展。要在索引1处添加项,您应该具有元素#0。
答案 7 :(得分:0)
不要在列表中直接添加索引1 如果你想在列表中添加值,请添加如下 s.add( “大象”); 默认情况下,列表大小为0 如果要在列表中添加任何元素,则大小会自动增加 你不能直接在列表第一索引中添加。 //s.add(0,“大象”);
答案 8 :(得分:0)
您可以通过以下方式初始化ArrayList的大小(而不是容量):
ArrayList<T> list = new ArrayList<T>(Arrays.asList(new T[size]));
在您的情况下:
ArrayList<String> s = new ArrayList<String>(Arrays.asList(new String[10]));
这将创建一个包含10个空元素的ArrayList,因此您可以在大小(索引0-9)内以随机顺序添加元素。
答案 9 :(得分:0)
顺便说一句,ArrayList<String> s = new ArrayList<>(10);
将initialCapacity设置为10。
由于Arraylist的容量是可调的,因此只能使Java知道近似容量,并尽量避免由于容量扩展而导致的性能损失。