0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 4
|
|
1 | |
Разница между Vector и ArrayList20.08.2008, 17:35. Показов 11975. Ответов 16
Метки нет (Все метки)
Какая разница между Vector и ArrayList?
Как правелнее объявлять переменую типа ArrayList? 1) ArrayList variable=new ArrayList; 2) List variable=new ArrayList;
0
|
20.08.2008, 17:35 | |
Ответы с готовыми решениями:
16
В чем разница между new ArrayList<String>() и new ArrayList<>()? Разница между list и vector Разница между list и vector? Какая разница между различными сокетами (например, между 775 и 1155)? |
Sergey_
|
|
20.08.2008, 18:14 | 2 |
Vector, в отличие от ArrayList, является synchronized, то есть существует механизм синхронизации работы нескольких различных потоков с Vector. Из-за этого операции с Vector несколько медленнее, чем с ArrayList. Если приложение не содержит нескольких потоков, которые должны одновременно записывать информацию в список, то конечно нужно использовать ArrayList, а не Vector.
Ситуации, когда лучше использовать объявление List variable=new ArrayList(); существуют, но встречаются редко. Лучше не извращаться без причины и использовать ArrayList variable=new ArrayList(); |
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
|
|||||||||||
20.08.2008, 18:18 | 3 | ||||||||||
объявить можно как угодно :
http://www.javapower.ru/java/b... Heading315
0
|
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 4
|
|
20.08.2008, 18:29 [ТС] | 4 |
Проблема в том, что Професор в Университете говорит что мы должны использовать ArrayList, потому что Vector усторел. И ругается когда видит что кто то использует Vector. Хотя в Swing используется только Vector.
А насчет инициализации, то на теоретической контрольной нам снижают оценки если мы пишем ArrayList variable=new ArrayList(); Я думаю что так и надо, как мне Профу объяснить что можно и так?
0
|
Sergey_
|
|
20.08.2008, 18:58 | 5 |
Не стоит объяснять Профессору, что он не прав. Целее будешь. А переубедить его все равно не сможешь, так как он отошлет тебя к классикам (например, Bill Brogden) у которых черным по белому написано, что Vector устарел.
|
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 4
|
|
20.08.2008, 19:06 [ТС] | 6 |
Ну спасибо, утешил.
0
|
mishgun
|
|
20.08.2008, 21:16 | 7 |
Пошлите его про себя сделайте как он хочет а потом просто напишите мнгогопоточную прогу и после выпуска ткните его носом в эту прогу(тогда уже не больно будет ))))
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
||||||
21.08.2008, 09:10 | 8 | |||||
Что-то вы, мужики, не по делу наехали на ArrayList. Во-первых, что касается синхронизации: как-то вы скромно умолчали о том, что можно получить синхронизированный List легким движением руки:
А насчет того, почему ArrayList в исходном виде не синхронизирован, вполне понятно: синхронизация многопоточного приложения может делаться где-нибудь совсем в другом месте и, натыкивая синхронизированных методов где ни попадя, вы только замедлите прогу. Теперь о том, что там устарело. Что до меня, то меня очень устраивает ситуация, когда помимо динамических массивов существуют также связные списки, и оба используют одинаковые имена методов: работать удобно. Похожая ситуация с Hashtable / HashMap, TreeMap. Поэтому рискну согласиться с профессором. А почему в коде Swing используются Vector, вполне понятно: когда начинал писаться Swing, интерфейса Collection и его реализаций не существовало.
0
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
|
21.08.2008, 12:44 | 9 |
Вдогонку, по поводу того, почему вас заставляют использовать переменные типа List, а не ArrayList. Вот вообразите себе ситуацию: вы написали большую прогу, и в ней используется объект класса ArrayList. Он создается в некоем методе, а затем используется многими объектами, например, через какой-нибудь контекст. И вот однажды, при отладке или при внедрении, или вообще в ходе эксплуатации, вы обраруживаете, что поведение ArrayList вас не устраивает: медленные вставки, не поддерживает свопинг, что угодно. Нужно заменить реализацию. Но теперь вам придется пойти по одному из двух путей:
1. Во всех модулях программы найти, где объявляются ваши переменные ArrayList и заменить тип этих переменных на ваш новый. 2. Сделать вашу новую реализацию производным классом от ArrayList. Оба способа уродливые: первый - геморрой страшный, второй - довольно нелогично использовать класс там, где должен быть интерфейс. Ситуация будет еще хуже, если вы разработали библиотеку или просто reusable компонент, и на базе этого уже наверчена куча другого софта: разработчики этого самого софта вас с дерьмом сожрут. Это, кстати, также объясняет, почему устарел Vector.
0
|
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 4
|
|
21.08.2008, 21:23 [ТС] | 10 |
Ok
А представь что кто то создал програму в которой использует List a=new Vector(); и возвращает этот List. А я думаю что это ArrayList и пишу всю программу для него. И потом что мне использоват со Swing?
0
|
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
|
|
21.08.2008, 22:13 | 11 |
ты не думай что это Vector , думай что List , а если тебе действительно важно знать экземпляр какого класса это на самом деле -
то для этого существует instanceof или variable.class.isInstance(...)
0
|
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
|
|
21.08.2008, 22:17 | 12 |
а насчёт Swing - не Swing :
используешь то , что лучше подходит в каждом конкретном случае
0
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
|
24.08.2008, 08:38 | 13 |
to nesher
Вот это и есть тот неправильный подход, от которого тебя пытается избавить твой профессор. Если тебе вернули переменную типа List (или в документации на библиотеку сказано, что в каком-нибудь контексте содержится объект типа List), это есть прямое указание, что ты не должен думать, какого на самом деле класса объект, а должен пользоваться только методами интерфейса List. Там может быть что угодно, но если ты начнешь умствовать: использовать интроспекцию, или просто строить какие-либо предположения, то получится, что вместо того, чтобы пользоваться помощью, которую тебе предлагает инструмент разработки для избежания ошибок, ты будешь бороться против этого инструмента. А такой подход приводит всегда к одинаковому результату: появлению ПО, которое потом невозможно сопровождать. Безусловно, приятно иметь побольше возможностей, но, к сожалению, без определенной дисциплины программирования написать сколько-нибудь крупную систему невозможно. Надо сказать, что ты - не первый студент, который считает, что преподаватели - большей частью оторванные от жизни ребята, помешанные на бесплодных концепциях (я тоже так думал много лет назад ;-) ), но в конце концов выясняется, что все это - совсем не такая уж чушь, как казалось с первого взгляда.
0
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
|
24.08.2008, 09:17 | 14 |
Кстати, насчет того, что использовать со Swing. Дело в том, что java.util и javax.swing - совершенно независимые пакеты (извини, если прозвучало банально). Из этого следует, что вне зависимости от того, используешь ты Swing или нет, подходы к работе с java.util никаким образом меняться не будут. Таким образом, правильно будет использовать ArrayList (или, если необходимо, LinkedList) во всех случаях.
0
|
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
|
|
24.08.2008, 22:22 | 15 |
2 Itsme:
Спасибо коллега , что Вы заметили, что использование интроспекции в ДАННОЙ ситуации - мягко говоря 'неправильный подход'. Полностью с Вами согласен , только добавлю что я написал (прочтите внимательнее ) 'ты не думай что это Vector , думай что List ', имея в виду то же самое , что и Вы ,хотя конечно не настолько красноречиво как Вы. Но интроспекцию всё же для чего то придумали , и я показал молодому человеку , что в Java есть такие механизмы . А насчёт 'правильно будет использовать ArrayList (или, если необходимо, LinkedList) ВО ВСЕХ СЛУЧАЯХ', - в реальной жизни бывают случаи , когда вы обязаны использовать именно Vector , а не одну из имплементаций List. Например апплет для интернет, если вы хотите чтобы ваш апплет работал и в броузерах не поддерживающих Java2 ( а таких на сегодняшний день ,насколько я понимаю - к сожалению большинство ).O Swing в такой ситуации естественно и речи нет.
0
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
|
25.08.2008, 08:33 | 16 |
to scroodge
Да, я заметил, что вы сказали про 'не думать', но, судя по сообщениям от nesher, требовались более подробные разъяснения, почему так думать не нужно. Что касается апплетов: вы, конечно, правы: если конкретная реализация Java не поддерживает ArrayList, то использовать его было бы довольно затруднительно :-( Однако если вы работаете с Java-2, видится разумным использовать его действительно во всех случаях.
0
|
0 / 0 / 0
Регистрация: 27.02.2008
Сообщений: 56
|
|
25.08.2008, 08:34 | 17 |
to scroodge
Да, я заметил, что вы сказали про 'не думать', но, судя по сообщениям от nesher, требовались более подробные разъяснения, почему так думать не нужно. Что касается апплетов: вы, конечно, правы: если конкретная реализация Java не поддерживает ArrayList, то использовать его было бы довольно затруднительно :-( Однако если вы работаете с Java-2, видится разумным использовать его действительно во всех случаях.
0
|
25.08.2008, 08:34 | |
25.08.2008, 08:34 | |
Помогаю со студенческими работами здесь
17
Сумма между min и max значениями массива ArrayList Передача std::vector между классами Разница между != и <>? Разница между --f и f-- Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |