¿Cómo inicializar el objeto List en Java?

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

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

Me enfrenta el siguiente error:

No se puede crear una instancia del tipo List

¿Cómo puedo crear una instancia de List ?

Si revisas la API para la List , notarás que dice:

 Interface List 

Ser una interface significa que no se puede crear una instancia (no es posible una new List() ).

Si revisas ese enlace, encontrarás algunas class que implementan List :

Todas las clases de implementación conocidas:

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

Esos pueden ser instanciados. Use sus enlaces para saber más sobre ellos, IE: para saber cuál se ajusta mejor a sus necesidades.

Los 3 más comúnmente usados ​​probablemente sean:

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

Prima:
También puede crear una instancia con valores, de una manera más fácil, utilizando la class Arrays , de la siguiente manera:

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

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

JDK2

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

JDK7

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

JDK8

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

JDK9

 List list = List.of("one", "two", "three"); 

Además, existen otras formas de suministro de otras bibliotecas como Guava .

 List list = Lists.newArrayList("one", "two", "three"); 

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

 List supplierNames = new ArrayList(); 

o

 List supplierNames = new LinkedList(); 

Tendrá que utilizar ArrayList o similar.

List es una interfaz.

Utilizar esta:

 import java.util.ArrayList; ... List supplierNames = new ArrayList(); 

List es una interfaz y no puede inicializar una interfaz. Cree una instancia de implementación en su lugar.

Me gusta:

 List abc = new ArrayList(); List xyz = new LinkedList(); 

La lista es solo una interfaz, una definición de una lista genérica. Debe proporcionar una implementación de esta interfaz de lista. Dos más comunes son:

ArrayList : una lista implementada en una matriz

 List supplierNames = new ArrayList(); 

LinkedList – una lista implementada como una cadena de elementos interconectados

 List supplierNames = new LinkedList(); 

En la mayoría de los casos, quiere ArrayList simple: una implementación de List

Antes de JDK versión 7

 List list = new ArrayList(); 

JDK 7 y posteriores puedes usar el operador de diamantes

 List list = new ArrayList<>(); 

Informaciones adicionales están escritas aquí Documentación de Oracle – Colecciones

Dependiendo del tipo de Lista que quieras usar, algo como

 List supplierNames = new ArrayList(); 

Debería ponerte en marcha.

La lista es la interfaz, ArrayList es una implementación de la interfaz de la Lista. Se pueden encontrar más implementaciones que pueden adaptarse mejor a sus necesidades leyendo los JavaDocs de la interfaz de la Lista .

Si solo desea crear una List inmutable con solo un objeto en ella, puede usar esta API:

 List oneObjectList = Collections.singletonList("theOnlyObject”); 

Más información: documentos

List es una interfaz. No puedes usar List para inicializarlo.

  List supplierNames = new ArrayList(); 

Estas son algunas de las clases de lista impelementada,

 ArrayList, LinkedList, Vector 

Puede usar algo de esto según su requisito. Estas cada clase tienen sus propias características.

Por las dudas, cualquiera que aún se detenga con esta pregunta. Porque veo que uno o dos usuarios nuevos hacen la misma pregunta y todos dicen: No , no puedes hacer eso. Querida Prudence . Además de todas las respuestas dadas aquí, me gustaría brindarte información adicional: sí, puedes hacerlo. do, List list = new List (); Pero a costa de escribir implementaciones de todos los métodos de Interfaces. La noción no es simplemente List list = new List (); pero

 List list = new List(){ @Override public int size() { // TODO Auto-generated method stub return 0; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return false; } @Override public boolean contains(Object o) { // TODO Auto-generated method stub return false; } 

….. y así sucesivamente (no puedo escribir todos los métodos)

Este es un ejemplo de clase anónima . Es correcto cuando alguien dice: No , no se puede crear una instancia de una interfaz, y eso es correcto. Pero nunca se puede decir : NO se puede escribir List list = new List (); pero, evidentemente, puedes hacer eso y esa es una afirmación difícil de hacer que no puedes hacer .