|
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
|
|
| 02.12.2014, 20:15 | |
|
Ответы с готовыми решениями:
9
Почему List list= new ArrayList(); List и ArrayList ArrayList через List |
|
любитель покушать
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 | ||
|
Из ответа следует что - лучше использовать 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 | ||||||
|
А что такой конструкции не существует в природе ?
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 как решение
Решение
1
|
|||
| 02.12.2014, 21:41 | |
|
Помогаю со студенческими работами здесь
10
Коллекции List/ArrayList: чем отличаются и для чего нужны? Пример создания коллекции объектов с использованием интерфейса List и класса ArrayList Задача: Создать объект List с использованием объекта ArrayList, заполнить его произвольными даннами типа int.... Связный список или Arraylist ? Сравнение символов в файле или ArrayList Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|