(hilo antiguo, pero solo 2 centavos ya que ninguno menciona Guava u otras libs y algunos otros detalles)
Si puedes, usa guayaba
Vale la pena señalar la forma de la guayaba, que simplifica enormemente estas travesuras:
Uso
Para una lista inmutable
Usar la ImmutableList
clase y sus of()
y copyOf()
fábrica métodos (elementos no puede ser nulo) :
List<String> il = ImmutableList.of("string", "elements"); // from varargs
List<String> il = ImmutableList.copyOf(aStringArray); // from array
Para una lista mutable
Use la Lists
clase y sus newArrayList()
métodos de fábrica:
List<String> l1 = Lists.newArrayList(anotherListOrCollection); // from collection
List<String> l2 = Lists.newArrayList(aStringArray); // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
Tenga en cuenta también los métodos similares para otras estructuras de datos en otras clases, por ejemplo en Sets
.
La atracción principal podría ser reducir el desorden debido a los genéricos para la seguridad de tipos, ya que el uso de los métodos de la fábrica de guayaba permite inferir los tipos la mayor parte del tiempo. Sin embargo, este argumento tiene menos agua desde que Java 7 llegó con el nuevo operador de diamantes.
Pero no es la única razón (y Java 7 aún no está en todas partes): la sintaxis abreviada también es muy útil, y los inicializadores de métodos, como se ve arriba, permiten escribir código más expresivo. Lo haces en una llamada de guayaba lo que toma 2 con las colecciones de Java actuales.
Si no puedes ...
Para una lista inmutable
Utilice la Arrays
clase de JDK y su asList()
método de fábrica, envuelto con un Collections.unmodifiableList()
:
List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
Tenga en cuenta que el tipo devuelto para asList()
un List
uso de una concreta ArrayList
aplicación, pero que no es java.util.ArrayList
. Es un tipo interno, que emula, ArrayList
pero en realidad hace referencia directa a la matriz pasada y la hace "escribir" (las modificaciones se reflejan en la matriz).
Prohíbe modificaciones a través de algunos de los List
métodos de la API simplemente extendiendo un AbstractList
(por lo tanto, agregar o eliminar elementos no es compatible), sin embargo, permite que las llamadas set()
anulen elementos. Por lo tanto, esta lista no es realmente inmutable y asList()
debe incluirse un llamado a Collections.unmodifiableList()
.
Vea el siguiente paso si necesita una lista mutable.
Para una lista mutable
Igual que el anterior, pero envuelto con un real java.util.ArrayList
:
List<String> l1 = new ArrayList<String>(Arrays.asList(array)); // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array)); // Java 1.7+
List<String> l2 = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
Para fines educativos: la buena manera manual
// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
final List<T> l = new ArrayList<T>(array.length);
for (final T s : array) {
l.add(s);
}
return (l);
}
// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
final List l = new ArrayList(array.length);
for (int i = 0; i < array.length; i++) {
l.add(array[i]);
}
return (l);
}