列表中的列表



我正在制作一个链表的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),然后在那里添加Entry。

为了避免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个字母以外的字母开头的奇怪姓氏会导致程序崩溃。

您应该编写

LinkedList<Entry> tmp = phoneBook.get(i);
if (tmp == null) tmp = new LinkedList<Entry>();
tmp.add(new Entry(surname, initial, phoneNumber));
phoneBook.set(i, tmp);

相关内容

  • 没有找到相关文章

最新更新