Рассмотрим следующий код:
final Set<String> allPaths = new HashSet<String>();
for (final String path: paths) {
allPaths.add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
MyData
- это класс, который я не должен касаться.Он должен получить ArrayList
в качестве аргумента.До этого дня мы использовали этот способ, потому что нас не заботил порядок, поэтому мы использовали Set
(поэтому дублирования не будет).Но теперь я хотел бы сохранить порядок элементов, поэтому после некоторых исследований я обнаружил, что для этого могу использовать структуру данных LinkedHashSet
.Итак, я сделал:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
Проблема в том, что я не уверен, как конвертировать LinkedHashSet
в ArrayList
.Кроме того, я подумал об использовании ArrayList
вместо LinkedHashSet
, поэтому мне не придется преобразовывать его, но мне придется перебирать массив (O(n)
).
Что хорошо, чистои эффективный способ я должен использовать?