Как инициализировать объект List <String> в Java?

Я не могу инициализировать List как в следующем коде:

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

Я сталкиваюсь со следующей ошибкой:

Невозможно создать тип List<String>

Как я могу создать экземпляр List<String>?

Ответ 1

Если вы проверите API для List, вы заметите, что он говорит:

Interface List<E>

Будучи interface, означает, что он не может быть создан (возможно new List()).

Если вы проверите эту ссылку, вы найдете несколько class es, которые реализуют List:

Все известные классы реализации:

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

Те могут быть созданы. Используйте их ссылки, чтобы узнать о них больше, I.E: знать, что лучше подходит вашим потребностям.

3 наиболее часто используемых, возможно, следующие:

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

Bonus:
Вы также можете создать его со значениями более простым способом, используя Arrays class, как показано ниже:

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

Но обратите внимание, что вам не разрешено добавлять в этот список больше элементов, так как он fixed-size.

Ответ 2

Не могу создать интерфейс, но есть несколько реализаций:

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"));

Плюс есть много других способов, предоставляемых другими библиотеками, такими как Guava.

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

Ответ 3

Список - это интерфейс, вы не можете создавать интерфейс, потому что интерфейс - это соглашение, какие методы должны иметь ваши классы. Чтобы создать экземпляр, вам понадобятся некоторые реализации (реализации) этого интерфейса. Попробуйте приведенный ниже код с очень популярными реализациями интерфейса List:

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

или

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

Ответ 4

Вам нужно будет использовать ArrayList<String> или такой.

List<String> - это интерфейс.

Используйте это:

import java.util.ArrayList;

...

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

Ответ 5

Список - это интерфейс, и вы не можете инициализировать интерфейс. Создайте вместо этого исполняемый класс.

Как

List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();

Ответ 6

В большинстве случаев вам нужна простая ArrayList - реализация List

Перед версией JDK 7

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

JDK 7, а затем вы можете использовать алмазный оператор

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

Дополнительная информация написана здесь Документация Oracle - Коллекции

Ответ 7

Список - это просто интерфейс, определение какого-то общего списка. Вам необходимо обеспечить реализацию этого интерфейса списка. Двумя наиболее распространенными являются:

ArrayList - список, реализованный по массиву

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

LinkedList - список, реализованный как взаимосвязанная цепочка элементов

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

Ответ 8

В зависимости от того, какой список вы хотите использовать, что-то вроде

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

должен вас поймать.

Список - это интерфейс, ArrayList - это одна реализация интерфейса List. Дополнительные реализации, которые могут лучше соответствовать вашим потребностям, можно найти, прочитав JavaDocs интерфейса List.

Ответ 9

Если вы просто хотите создать неизменный List<T> только с одним объектом, вы можете использовать этот API:

List<String> oneObjectList = Collections.singletonList("theOnlyObject");

Больше информации: документы

Ответ 10

Список - это интерфейс. Вы не можете использовать List для его инициализации.

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

Это некоторые из классов, переименованных в Listed,

ArrayList, LinkedList, Vector

Вы можете использовать любое из них в соответствии с вашим требованием. Эти классы имеют свои особенности.

Ответ 11

На всякий случай, кто-то все еще задерживается вокруг этого вопроса. Потому что, я вижу, что один или два новых пользователя снова задают один и тот же вопрос, и все говорят тогда: "Нет, вы не можете этого сделать, Дорогая Пруденс". Помимо всех ответов, приведенных здесь, я хотел бы предоставить дополнительную информацию - Да, вы действительно можете сделать, Список списка = новый список(); Но ценой написания реализаций всех методов интерфейсов. Понятие не просто List list = new List(); но

List<Integer> list = new List<Integer>(){

        @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;
        }

..... и т.д. (Кант записывает все методы.)

Это пример Анонимного класса. Правильно, когда кто-то заявляет, Нет, вы не можете создать интерфейс, и это правильно. Но вы никогда не сможете сказать: Вы не можете записать список List = new List();, но, очевидно, вы можете сделать это, и это жесткое выражение, которое вы не можете сделать.

Ответ 12

Мы создали союз-, чтобы упростить задачу 1: как преобразовать X в Y (например, String в Integer). Построение объекта также является своего рода преобразованием, поэтому у него есть простая функция для создания Map, List, Set:

import io.thedocs.soyuz.to;

List<String> names = to.list("John", "Fedor");

Пожалуйста, проверьте это - у него много других полезных функций