Зачем вам назначать переменную для метода удаления для Java ArrayList, и какие будут последствия? - PullRequest
1 голос
/ 16 февраля 2012

Допустим, у вас объявлено два списка:

ArrayList listA = new ArrayList();
ArrayList<Book> listB = new ArrayList<Book>();

И тогда у вас есть эти утверждения:

Object obj = listA.remove(2);
Book bk = listB.remove(2);
String str = listA.remove(1);

Предполагая, что в каждом из указанных мест есть объект, почему вы хотите присвоить эти методы переменной и каковы будут ее последствия? Я прочитал эту главу три раза, и до сих пор не понимаю этого. Чего мне не хватает?

Ответы [ 3 ]

3 голосов
/ 16 февраля 2012

Метод remove(int) удаляет объект из списка и возвращает объект, который был удален. Удаление объекта - это не то же самое, что удаление ... у вас может быть сценарий использования, в котором вы хотите удалить объект, но все же хотите что-то с ним сделать. Если вам действительно не нужен объект после его удаления, просто не назначайте его, как в

list.remove(3)

Это удалит объект со смещением (3) и не сохранит ссылку на него. Если других ссылок нет, он в конечном итоге будет собирать мусор.

2 голосов
/ 16 февраля 2012

Рассмотрим три оператора:

Первый Object obj = listA.remove(2) использует необработанный тип.Это определение содержит объект.Все унаследовано от Object, поэтому оно может содержать что угодно.Это может привести к проблемам.Посмотрите на этот пост , чтобы понять, почему это нежелательно.

Второй тип строго напечатан.Вы можете только удалить элементы и назначить их типу из определения (в ArrayList<Book> он должен соответствовать Book).Это способ для java-компилятора проверить ваши типы, чтобы убедиться, что вы работаете со всеми одинаковыми типами.Если вы не соответствуете, я считаю, что это ошибка компилятора.

Третий демонстрирует, почему первый элемент является проблемой.Прочтите этот пост , и он скажет вам, почему.

0 голосов
/ 16 февраля 2012

Когда ArrayList использует метод #remove (Object obj), он возвращает true, если он был успешно удален, или false, если он не был удален.

Edit: только что заметил, что я использовал параметр Object там. Помимо этого метода параметра index, он возвращает удаленное значение.

Это может быть полезно для переноса из одного списка в другой, а иногда даже рекурсивными методами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...