Considere el siguiente código:
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
es una clase que no debería tocar. Debe hacerse una ArrayList
como argumento. Antes de este día, hemos utilizado de esa manera porque no importa el orden, es por eso que hemos utilizado Set
(por lo que no se duplicará). Pero ahora, me gustaría mantener el orden de los elementos, por lo que después de algunas investigaciones, descubrí que puedo usar la estructura de datos LinkedHashSet
con el fin de hacerlo. Así que lo hice:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
El problema es que no estoy seguro de cómo convertir LinkedHashSet
a ArrayList
. Además, he pensado en utilizar ArrayList
en lugar de LinkedHashSet
por lo que no tendrá que convertir, pero voy a tener que iterar sobre la matriz ( O(n)
).
Lo bueno, limpio y effiect manera debo usar?
Sólo tiene que utilizar el public boolean addAll(Collection<? extends E> c)
método, en el arrayList, acepta ninguna Collection
.
Usted tiene su LinkedHashSet
:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
y luego hacer (se puede usar esto incluso si mylist
no está vacío):
List<String> myList = new ArrayList<>();
mylist.addAll(allPaths);
o incluso para un enfoque más simple:
List<String> myList = new ArrayList<>(allPaths);