Рассмотрим следующий код:
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)
).
Какой хороший, чистый и эффективный способ я должен использовать?
MyData
на использованиеCollection
. Почему изначально было жестко закодировано использованиеArrayList
? - person Elliott Frisch   schedule 30.12.2018ArrayList
между использованиемLinkedHashSet
и использованием любого другогоSet
, за исключением того, что он будет использовать правильный порядок итераций. - person RealSkeptic   schedule 30.12.2018O(n)
? Я не понимаю этого. - person UninformedUser   schedule 30.12.2018paths
в вашем коде? ЭтоList
илиSet
? - person Naman   schedule 30.12.2018paths
вообще массив? - person Dorian Gray   schedule 30.12.2018Collection
этого не выражает. - person Dorian Gray   schedule 30.12.2018List
(илиIterable
) будет лучше, чемArrayList
. Но поскольку мы не можем видетьMyData
, я по-прежнему не убежден в его неприкосновенности. - person Elliott Frisch   schedule 30.12.2018