java是什么导致我的数组列表中出现此ArrayOutOfBoundsException?
import java.util.*;
import java.util.ArrayList;
class MyHashTable<K extends Comparable<K>, E> {
private ArrayList<Entry<K,E>> bucket = new ArrayList<Entry<K,E>>();
private int bucketSize;
private int collisionCount = 0;
// Constructor that takes number of buckets as input
public MyHashTable( int len )
{
this.bucketSize = len;
for ( int i = 0; i < len; i++ )
{
bucket.set( i, null ); //ERROR APPEARS ON THIS LINE
}
}
当我用另一种方法调用
MyHashTable<MyString, AnimalRecord> linearProbing = new MyHashTable<MyString, AnimalRecord>(59);
linearProbing.put( lion.name, lion );
# 1 楼答案
你需要第一眼就添加而不是设置
看看doc of set() method
您遇到了条件
index >= size()
# 2 楼答案
我认为,很明显,ArrayList是使用默认容量(10)创建的,而您正试图访问它上面的索引(最多58个)
# 3 楼答案
最初,当您创建
ArrayList
的新实例时,ArrayList
是空的:当您在
ArrayList
上调用set
方法时,您试图替换一个现有的元素,该元素找不到,因为列表为空如果需要将元素添加到列表中,则应该使用
add
,而不是set
# 4 楼答案
创建一个空的arrayList
{a1}方法
所以
尝试将null设置为第
i
个元素(从0
开始)。但是arraylist是空的,这就是为什么会出现异常您需要的是^{} 方法:
将
null
添加到ArrayList
的末尾# 5 楼答案
查看类ArrayList的Java文档以及您使用的方法:
方法集“用指定的元素替换列表中指定位置的元素。”
在方法调用时,没有包含元素59的ArrayList。使用ArrayList()标准构造函数构造的ArrayList的初始大小为10
可以使用构造函数
ArrayList(int initialCapacity)
请在此处查找文档:
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
# 6 楼答案
你的ArrayList(bucket)中没有任何元素——bucket。集合替换元素,但不插入元素
见http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)
打电话给ArrayList。改为add(),因为这将在数组末尾追加一个元素