¿Cómo inicializar el objeto List<String> en Java?

Resuelto Ahmed Nabil asked hace 11 años • 13 respuestas

No puedo inicializar una Lista como en el siguiente código:

List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));

Me enfrento al siguiente error:

No se puede crear una instancia del tipoList<String>

¿ Cómo puedo crear una instancia List<String>?

Ahmed Nabil avatar Nov 15 '12 17:11 Ahmed Nabil
Aceptado

Si revisas la API , Listnotarás que dice:

Interface List<E>

Al ser un interfacemedio, no se puede instanciar (no new List()es posible).

Si marca ese enlace, encontrará algunos classque implementan List:

Todas las clases de implementación conocidas:

AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack,Vector

Se pueden crear instancias de algunos de ellos (los que no están definidos como abstract class). Utilice sus enlaces para saber más sobre ellos, es decir, para saber cuál se adapta mejor a sus necesidades.

Los 3 más utilizados probablemente sean:

 List<String> supplierNames1 = new ArrayList<String>();
 List<String> supplierNames2 = new LinkedList<String>();
 List<String> supplierNames3 = new Vector<String>();

Bonificación:
también puedes crear una instancia con valores, de una manera más sencilla, usando Arrays class, de la siguiente manera:

List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));

Pero tenga en cuenta que no puede agregar más elementos a esa lista, ya que es fixed-size.

J.A.I.L. avatar Nov 15 '2012 10:11 J.A.I.L.

No se puede crear una instancia de una interfaz, pero hay algunas implementaciones:

JDK2

List<String> list = Arrays.asList("one", "two", "three");

JDK7

//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

JDK9

// creates immutable lists, so you can't modify such list 
List<String> immutableList = List.of("one", "two", "three");

// if we want mutable list we can copy content of immutable list 
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));

Además, hay muchas otras formas proporcionadas por otras bibliotecas como Guava .

List<String> list = Lists.newArrayList("one", "two", "three");
LazerBanana avatar Nov 14 '2017 14:11 LazerBanana

La lista es una interfaz , no puede crear una instancia de una interfaz, porque la interfaz es una convención, qué métodos deberían tener sus clases. Para crear una instancia, necesita algunas realizaciones (implementaciones) de esa interfaz. Pruebe el siguiente código con implementaciones muy populares de la interfaz List:

List<String> supplierNames = new ArrayList<String>(); 

o

List<String> supplierNames = new LinkedList<String>();
Doseke avatar Nov 15 '2012 10:11 Doseke