Списки в списках

1

Я делаю ArrayList из связанных списков, чтобы провести запись в телефонной книге. Все, у кого есть фамилия, начинающаяся с A, входит в первый список, B входит во второй список и т.д. Im пытается сделать метод добавления для записи в списке списков. Но я получаю исключения 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), который является другим связанным списком, а затем добавить туда запись.

Теги:
arraylist
linked-list

2 ответа

2
Лучший ответ

Чтобы избежать IndexOutOfBounds вам необходимо убедиться, что ваш внешний список инициализирован с 26 элементами.

Код, который вы используете ниже, не работает:

List<LinkedList<Entry>> phoneBook = new ArrayList<LinkedList<Entry>>(26);

Он дает phoneBook вместимость 26, но ее размер остается равным нулю. Вам нужно добавить 26 связанных списков в phoneBook. Вы можете сделать это следующим образом:

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

Вам также нужно проверить, что i находится в пределах этих границ, иначе странные фамилии, начинающиеся буквами, отличными от 26 букв латинского алфавита, могут привести к сбою вашей программы.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню