Это абсолютно две разные структуры хранения данных
Во-первых, в ArrayList и LinkedList, что имплементируют интерфейс List, элементы имеют порядковый номер, с помощью которого их можно получить, это можно сравнить с книжной полкой, где все книги расставлены по алфавиту, а буква алфавита, это цифра. В ArrayList используется принцип обыкновенного массива в Java, который каждый раз копируется (если мне не изменяет память). В LinkedList, не зря он связный список, реализована специальная структура, где каждый элемент содержит ссылку на предыдущий и следующий элемент массива, по этой причине создание будет быстрее проходить в ArrayList, а удаление в LinkedList.
Set, это уже другая структура хранения данных, включает в себя HashSet, TreeSet и LinkedHashSet, последнее хз че это такое, но суть множеств заключается в том, что элементы хранятся там, как каша, всё вперемешку и не имеет определенного номера, это в случае с HashSet. TreeSet уже будет покруче, там все элементы хранятся в "правильном" порядке, то есть для чисел, это 1 2 3, для строк, это Азбука Балалайка Вареники. То есть там это порядок по возрастанию, а здесь по алфавиту.
По сути, основным отличием этих структур хранения данных является то, что элементы внутри не имеют своего номера, например, это когда мы привыкли вызывать метод array.get(0), чтобы получить 1ый элемент из массива. Преимущество множеств Set - это их быстрая работа, так как у них есть хэширование, как и у Map
Кстати, забыл упомянуть про Stack (Vector), ну я думаю, что вы с ним не раз сталкивались. Stack работает противоположно очереди Queue, если элемент зашел последним, то он выйдет первым. В нем элементы также не имеют каких либо циферок, в плане порядка. То есть там достается последний вошедший элемент. Кстати, по такому принципу работают приложения в Android, вроде, и исключения, вроде, хы (:
Java
List от Set различается лишь тем, что в Set не могут быть повторяющиеся элементы?
List — это список. Он подобен длинной кинопленке с кучей кадров, и в каждом кадре нарисован какой-то элемент.
У каждого кадра на такой пленке есть номер. Можно обратиться к кадру по его номеру, посмотреть его, перерисовать его карандашом. Но если нужно найти объект на пленке, то придется мотать ее целиком от начала до конца — пока не найдешь или пока не закончится пленка. Это может быть долго.
Set — это множество. Оно подобно куче хлама, наспех засунутого в дорожный чемодан. О порядке здесь обычно речи не идет (но это смотря как укладывать: например, LinkedHashSet и TreeSet подразумевают некоторый порядок).
Зато путник сразу видит, что он взял с собой: найти нужный предмет в куче не составляет для него большого труда. Он смотрит на кучу и сразу видит, есть в ней предмет или нет. Благодаря этому путник никогда не возьмет с собой двух одинаковых вещей: мгновенно обнаружив одну, он не станет паковать вторую.
Ясное дело, что вещи в чемодане не пронумерованы и он не может достать, например, вещь №27. Если ему всё-таки придется перебрать вещи, он их может доставать по одной в том порядке, в котором ему удобно их доставать (при помощи итератора).
У каждого кадра на такой пленке есть номер. Можно обратиться к кадру по его номеру, посмотреть его, перерисовать его карандашом. Но если нужно найти объект на пленке, то придется мотать ее целиком от начала до конца — пока не найдешь или пока не закончится пленка. Это может быть долго.
Set — это множество. Оно подобно куче хлама, наспех засунутого в дорожный чемодан. О порядке здесь обычно речи не идет (но это смотря как укладывать: например, LinkedHashSet и TreeSet подразумевают некоторый порядок).
Зато путник сразу видит, что он взял с собой: найти нужный предмет в куче не составляет для него большого труда. Он смотрит на кучу и сразу видит, есть в ней предмет или нет. Благодаря этому путник никогда не возьмет с собой двух одинаковых вещей: мгновенно обнаружив одну, он не станет паковать вторую.
Ясное дело, что вещи в чемодане не пронумерованы и он не может достать, например, вещь №27. Если ему всё-таки придется перебрать вещи, он их может доставать по одной в том порядке, в котором ему удобно их доставать (при помощи итератора).
Set это множество, а List список. List имеет порядок, Set скорее всего не имеет. Может ли содержать повторяющиеся элементы? Скорее всего нет. Читай документацию.
Похожие вопросы
- Стоит ли использовать Iterable вместо Set?
- Что создает List[] ?
- Как сделать так,что бы минимальный элемент каждой строки оказался в начале? Что неправильно сделала
- Задача. Есть несколько множеств множеств с числом элементов от 1 до 3 - пересечения возможны. Далее внутри...
- Ребят почему оба элемента массива принимают одинаковое значение? JAVA
- Поиск определенного элемента в скриншоте.
- Как сравнить элементы массива с другой переменной?
- Как назвается структура данных в программировании (C#), где доступ к каждому элементу осуществляется по имени?
- Составь программу в зависимости величины даны чисел матрица количество положительных и отрицательных элементов
- Чем различается Java FX от swing? Что имеет смысл учить? Подскажите самоучители на русском, плиз.
Почему же всё таки удаление в ArrayList происходит долго? Как я уже написал выше, ArrayList строится на обыкновенном Java массиве - просто array - int[], String[] (и т. д) - он самый. При удалении элемента из середины нельзя просто так оставить существовать этот массив, ведь там будет пробел, который всё портит. По этой причине ArrayList вынужден сдвинуть весь массив на 1 позицию левее, что занимает немалое кол-во времени, тогда как в LinkedList достаточно просто поменять ссылку на следующий и предыдущий элемент массива.