Java 列表中的列表

Java 列表中的列表,java,arraylist,linked-list,Java,Arraylist,Linked List,我正在制作一个链接列表的数组,用来保存一些电话簿的条目。每个姓氏以a开头的人都会出现在第一个列表中,B出现在第二个列表中,等等。我正在尝试为列表中的条目添加方法。但我得到了IndexOutOfBounds例外。这是我的加法 List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26); public void addEntry(String surname, St

我正在制作一个链接列表的数组,用来保存一些电话簿的条目。每个姓氏以a开头的人都会出现在第一个列表中,B出现在第二个列表中,等等。我正在尝试为列表中的条目添加方法。但我得到了IndexOutOfBounds例外。这是我的加法

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));
}
List phoneBook=newarraylist(26);
public void addEntry(字符串姓氏、字符串首字母、字符串电话号码){
扫描仪sc=新扫描仪(姓氏);
字符串字=sc.next();
word=word.toUpperCase();
char ch=word.charAt(0);
int i=ch;
i-=65;
phoneBook.get(i).add(新条目(姓氏、首字母、电话号码));
}
因此,我试图查看姓氏的第一个字母,如果是A,则转到元素(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);
LinkedList tmp=phoneBook.get(i);
如果(tmp==null)tmp=newlinkedlist();
tmp.add(新条目(姓氏、首字母、电话号码));
电话簿.set(i,tmp);

为了避免出现
索引自动边界
,您需要确保外部列表已初始化为26个条目

您在下面使用的代码无效:

List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26);
您还需要检查
i
是否在这些范围内,否则以拉丁字母表中26个字母以外的字母开头的奇怪姓氏将导致程序崩溃

List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26);
{
    for (int i = 0 ; i != 26 ; i++) {
        phoneBook.add(new LinkedList<Entry>());
    }
}