Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/35: Рейтинг темы: голосов - 35, средняя оценка - 4.57
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176

List<> или ArrayList<>

02.12.2014, 20:15. Показов 7016. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
List<Integer> list = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();

В чем преимущества первого метода? Общее представление имею конечно, но хотелось бы понять более детально. Можно пример какого-нибудь когда, где явно демонстрируется преимущество?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2014, 20:15
Ответы с готовыми решениями:

Почему List list= new ArrayList();
Слышал что правильно писать так: List list= new ArrayList(); Но почему не правильно писать List list=new List(); или ArrayList...

List и ArrayList
Здравствуйте! Крик души, я не особо понимаю, что вообще происходит. Был уже случай подобный (полной неразберихи): вызываю функцию из...

ArrayList через List
List&lt;Integer&gt; objTree = new ArrayList&lt;&gt;(); Я не понимаю смысла этой конструкции. List - это интерфейс. ArrayList - класс. Какой смысл...

9
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
02.12.2014, 20:27
Greens239, Такой пример: мне пару раз нужно было использовать класс TreeMap, а в нем метод higherKey, если бы я написал Map<..., ...> = new TreeMap<>();, то к нужным методам доступ бы не получил, ибо эти методы относятся к реализации TreeMap. В случае, если все нужные мне методы описаны в Map (get, put и т.д.), то, в дальнейшем, я могу просто поменять реализацию Map (HashMap, TreeMap и т.д.).
0
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
02.12.2014, 20:33  [ТС]
т.е если мне захотелось использовать вместо LinkedList ArrayLIst, то я могу
LinkedList<Integer> list1 = new LinkedList<>();
поменять на ArrayList<Integer> list1 = new ArrayList<>();

Таким образом, методы не меняются т.к эти классы реализуют интерфейс List и мы можем сделать изменение лишь в одном месте. Я вас так понял? Если да, то опять возникает тот же вопрос.
List<Integer> list1 = new LinkedList<>();
почему это лучше чем LinkedList<Integer> list1 = new LinkedList<>();?
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
02.12.2014, 20:51
Делая выбор между классами List<T> и ArrayList, предлагающими сходные функциональные возможности, следует помнить, что класс List<T> в большинстве случаев обрабатывается быстрее и является типобезопасным. Если в качестве типа T класса List<T> используется ссылочный тип, оба класса действуют идентичным образом. Однако если в качестве типа T используется тип значений, необходимо принять во внимание особенности, связанные с реализацией и упаковкой.
Если в качестве типа T используется тип значений, компилятор генерирует реализацию класса List<T> специально для этого типа значений. Это означает, что элемент списка List<T> не требует упаковки перед его использованием, и после создания примерно 500 элементов списка объем памяти, сэкономленной за счет отказа от их упаковки, превысит объем памяти, используемой для генерации реализации класса.
Необходимо убедиться, что тип значений, используемый в качестве типа T, реализует универсальный интерфейс IEquatable<T>. В противном случае такие методы, как Contains, должны будут вызывать метод Object.Equals(Object), который осуществляет упаковку соответствующего элемента списка. Если тип значений реализует интерфейс IComparable и исходный код принадлежит вам, следует также реализовать универсальный интерфейс IComparable<T>, чтобы избежать упаковки элементов списка методами BinarySearch и Sort. Если исходный код принадлежит не вам, передайте объект IComparer<T> в методы BinarySearch и Sort.
Использование реализации класса List<T>, определяемой конкретным типом, является предпочтительным по сравнению с использованием класса ArrayList или самостоятельным составлением коллекции со строго типизированной оболочкой. Дело в том, что собственная реализация должна выполнять все функции, которые уже автоматически предоставляются в .NET Framework, и к тому же общеязыковая среда выполнения может использовать общие метаданные и код MSIL, что невозможно обеспечить в собственной реализации.
1
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
02.12.2014, 21:00  [ТС]
Спасибо за столь подробное объяснение, но вопрос был не в этом)

Добавлено через 4 минуты
Мне кажется, что List<T> это интерфейс, а не класс, почему вы пишете класс?

Добавлено через 11 секунд
Мне кажется, что List<T> это интерфейс, а не класс, почему вы пишете класс?
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
02.12.2014, 21:09
Цитата Сообщение от Greens239 Посмотреть сообщение
Спасибо за столь подробное объяснение, но вопрос был не в этом)
А в чем ? Вам интересно знать что лучше использовать ? Я вам дал самый подробный ответ , что тут не ясного ?
Из ответа следует что - лучше использовать List<int> вместо ArrayList<int> , потому что List<int> генерирует реализацию класса специально для этого типа, это справедливо для простых типов (int, double, byte). Если у вас ссылочные типы (какие то классы) то оба класса действуют идентичным образом. Какие еще вопросы ?
0
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
02.12.2014, 21:10  [ТС]
Разве можно примитивный тип передавать?
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
02.12.2014, 21:12
А что такой конструкции не существует в природе ?
C#
1
List<int> L = new List<int> { 1, 2, 3 };
0
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
02.12.2014, 21:18  [ТС]
В JAVA нет

Добавлено через 51 секунду
Может вы просто тему перепутали? И мне про C# говорите?

Добавлено через 4 минуты
Точно перепутали. IComparable из C#. В java есть похожие Comparator и Comparable
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
02.12.2014, 21:41
Лучший ответ Сообщение было отмечено Greens239 как решение

Решение

Цитата Сообщение от Greens239 Посмотреть сообщение
Может вы просто тему перепутали?
Не "может", а 146%. О чём ясно говорится в конце поста.

Цитата Сообщение от maxillion Посмотреть сообщение
...предоставляются в .NET Framework...
Весь цимес в том, что использование интерфейсов всегда предпочтительнее, нежели конкретная его реализация. Так в переменную типа List можно положить ссылку на ArrayList или LinkedList, или Arrays.asList(), или любую другую имплементацию. И весь код, использующий эту самую переменную, править не придётся, т.к. использоваться будут только методы интерфейса.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2014, 21:41
Помогаю со студенческими работами здесь

Коллекции List/ArrayList: чем отличаются и для чего нужны?
ОБЪЯСНИТЕ ЧТО ТАКОЕ LIST И ARRAYLIST,ЧЕМ ОНИ ОТЛИЧАЮТСЯ И ДЛЯ ЧЕГО НУЖНЫ ВОТ ЕЩЕ ДВА ЗАДАНИЯ,Я ЧТО-ТО ПОПЫТАЛСЯ СДЕЛАТЬ,НО ПОКА ЧТО НЕ...

Пример создания коллекции объектов с использованием интерфейса List и класса ArrayList
package main; public class Main { public static void main(String args) { Segment s1 = new Segment(0.0, 0.0, 0.0, 1.0,...

Задача: Создать объект List с использованием объекта ArrayList, заполнить его произвольными даннами типа int....
Помогите, пожалуйста, написать вот такую программку.. &quot;Создать объект List с использованием объекта ArrayList, заполнить его произвольными...

Связный список или Arraylist ?
работ класса ArrayList ArrayList содержит внутренний массив , когда нужно записать во внутренний массив ещё один элемент, а свободного...

Сравнение символов в файле или ArrayList
Здравствуйте, я написал программу которая считывает с файла строки и переписывает их в другой файл, вставив в конец каждой строки ее номер....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru