Ответ 1
Определенно использовать LinkedHashSet. Это сделано для того, что вам нужно. Поиск всего массива ArrayList каждый раз, когда вам нужно что-то вставлять, будет выполняться убийца производительности (O (n) каждый раз))
Я хочу
Могу ли я узнать, что я должен рассмотреть, чтобы выбрать ArrayList (явно выполнить проверку перед вставкой) или LinkedHashSet?
Спасибо.
Определенно использовать LinkedHashSet. Это сделано для того, что вам нужно. Поиск всего массива ArrayList каждый раз, когда вам нужно что-то вставлять, будет выполняться убийца производительности (O (n) каждый раз))
Используйте LinkedHashSet
, если вы не хотите вставлять повторяющиеся элементы.
A LinkedHashSet
, кажется, идеально подходит для счета.
Когда вы создаете свои собственные объекты и планируете использовать их в коллекции типа LinkedHashSet
здесь. Не забудьте переопределить как equals
, так и hashcode
для элемента, который вы собираетесь хранить в нем.
Пожалуйста, проверьте это: http://wiki3.cosc.canterbury.ac.nz/images/e/e9/JavaCollections.png
LinkedHashSet - это то, что вам нужно, потому что это реализация интерфейса Установить. У набора есть одна очень крутая привычка: она не позволяет дублировать по умолчанию. Итак, мы закончили с вашим 1.
Как насчет 2? Мы знаем, что нам нужна одна из реализации Set, но которая?
HashMap - вы можете хранить пары K, V, но нет порядка.
TreeSet - это самое медленное решение, потому что оно использует метод compareTo
для сохранения и упорядочения каждого элемента. Вот почему вы можете передать ему компаратор, когда вы строите TreeSet.
LinkedHashSet. Возвращает элементы в порядке их вставки. Это упорядоченная версия HashSet.
Здесь вы найдете отличное описание: http://java67.blogspot.co.uk/2014/01/when-to-use-linkedhashset-vs-treeset-vs-hashset-java.html?_sm_au_=iVVMtMLHSDQ5P0P7