列表中的列表

时间:2014-04-25 15:50:53

标签: java arraylist linked-list

我正在创建一个链接列表的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)这是另一个链表,然后在那里添加条目。

2 个答案:

答案 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);