我正在创建一个链接列表的ArrayList来保存电话簿的一些条目。姓氏以A开头的每个人都进入第一个列表,B进入第二个列表等。我试图让一个条目的添加方法进入列表列表。但我得到IndexOutOfBounds异常。这是我的addEntry方法。
List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26);
public void addEntry(String surname, String initial, String phoneNumber) {
Scanner sc = new Scanner(surname);
String word = sc.next();
word = word.toUpperCase();
char ch = word.charAt(0);
int i = ch;
i -= 65;
phoneBook.get(i).add(new Entry(surname, initial, phoneNumber));
}
所以我试着查看姓氏的第一个字母,如果它的A,转到元素(0)这是另一个链表,然后在那里添加条目。
答案 0 :(得分:2)
为了避免IndexOutOfBounds
,您需要确保使用26个条目初始化外部列表。
您在下面使用的代码不起作用:
List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26);
它为phoneBook
提供26的容量,但其大小保持为零。您需要向phoneBook
添加26个链接列表。你可以这样做:
List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26);
{
for (int i = 0 ; i != 26 ; i++) {
phoneBook.add(new LinkedList<Entry>());
}
}
您还需要检查i
是否在这些范围内,否则以拉丁字母的26个字母以外的字母开头的奇怪姓氏将导致您的程序崩溃。
答案 1 :(得分:0)
你应该写
LinkedList<Entry> tmp = phoneBook.get(i);
if (tmp == null) tmp = new LinkedList<Entry>();
tmp.add(new Entry(surname, initial, phoneNumber));
phoneBook.set(i, tmp);