Когда вы знаете, когда использовать TreeSet или LinkedList? Каковы преимущества каждой структуры?
В общем, вы выбираете тип коллекции, основываясь на структурных и эксплуатационных свойствах, которые вам нужны. Например, TreeSet представляет собой набор и, следовательно, не позволяет дублировать и не сохраняет порядок вставки элементов. Напротив, LinkedList является списком и, следовательно, позволяет дублировать и сохраняет порядок вставки. С точки зрения производительности TreeSet дает вам вставку и удаление O(logN)
, тогда как LinkedList
дает вставку в начало или конец O(1)
и O(N)
ввод в выбранное положение или удаление.
Все детали указаны в соответствующем классе и интерфейсе javadocs, но полезную сводку можно найти в Java Collections Cheatsheet.
На практике выбор типа сбора тесно связан с дизайном алгоритма. Эти два необходимо сделать параллельно. (Нехорошо решить, что ваш алгоритм требует коллекции со свойствами X, Y и Z, а затем обнаруживает, что такой тип сбора не существует.)
В вашем прецеденте выглядит, что TreeSet лучше подходит , Нет эффективного способа (то есть лучше, чем O(N^2)
), чтобы отсортировать большой LinkedList, который не включает превращение его в какую-либо другую структуру данных для сортировки. Нет эффективного способа (то есть лучше, чем O(N)
), чтобы вставить элемент в правильное положение в ранее отсортированном LinkedList. Третья часть (копирование в массив) одинаково хорошо работает с LinkedList или TreeSet; это операция O(N)
в обоих случаях.
[Я предполагаю, что коллекции достаточно велики, что большая сложность O точно предсказывает реальную производительность ...]
Я не хочу начинать дополнительный ответ, потому что некоторые уже были предоставлены, но я хочу добавить еще один факт: вы говорили о добавлении/удалении данных. Как насчет обновления? Имейте в виду, что TreeSet wil никогда не обновляет свой порядок сортировки, если вы меняете объекты элемента в отношении их «сортировочного ключа». Если вы хотите это сделать, используйте мой класс [UpdateableTreeSet] (http://stackoverflow.com/a/11169301/1082681) или что-то подобное. Это может быть решающим фактором, если у вас есть объекты с изменяющимся состоянием. – kriegaex