Как сделать новый список в Java - PullRequest
678 голосов
/ 13 мая 2009

Создаем Set как:

Set myset = new HashSet()

Как нам создать List в Java?

Ответы [ 24 ]

882 голосов
/ 13 мая 2009
List myList = new ArrayList();

или с генериками ( Java 7 или более поздняя версия)

List<MyType> myList = new ArrayList<>();

или с генериками (Старые версии Java)

List<MyType> myList = new ArrayList<MyType>();
416 голосов
/ 13 мая 2009

Дополнительно, если вы хотите создать список, в котором есть что-то (хотя это будет фиксированный размер):

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");
167 голосов
/ 29 мая 2013

Позвольте мне подвести итог и добавить кое-что:

JDK

1. new ArrayList<String>();
2. Arrays.asList("A", "B", "C")

гуава

1. Lists.newArrayList("Mike", "John", "Lesly");
2. Lists.asList("A","B", new String [] {"C", "D"});

Неизменный список

1. Collections.unmodifiableList(new ArrayList<String>(Arrays.asList("A","B")));
2. ImmutableList.builder()                                      // Guava
            .add("A")
            .add("B").build();
3. ImmutableList.of("A", "B");                                  // Guava
4. ImmutableList.copyOf(Lists.newArrayList("A", "B", "C"));     // Guava

Пустой неизменяемый список

1. Collections.emptyList();
2. Collections.EMPTY_LIST;

Список символов

1. Lists.charactersOf("String")                                 // Guava
2. Lists.newArrayList(Splitter.fixedLength(1).split("String"))  // Guava

Список целых чисел

Ints.asList(1,2,3);                                             // Guava
37 голосов
/ 08 февраля 2018

В Java 8

Чтобы создать непустой список фиксированного размера (такие операции, как добавление, удаление и т. Д. Не поддерживаются):

List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported

Чтобы создать непустой изменяемый список:

List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));

В Java 9

Использование новых List.of(...) статических заводских методов:

List<Integer> immutableList = List.of(1, 2);

List<Integer> mutableList = new ArrayList<>(List.of(3, 4));

В Java 10

Использование Вывод типа локальной переменной :

var list1 = List.of(1, 2);

var list2 = new ArrayList<>(List.of(3, 4));

var list3 = new ArrayList<String>();

И следуйте лучшим практикам ...

Не используйте необработанные типы

Начиная с Java 5, дженерики были частью языка - вы должны использовать их:

List<String> list = new ArrayList<>(); // Good, List of String

List list = new ArrayList(); // Bad, don't do that!

Программа для интерфейсов

Например, программа для интерфейса List:

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

Вместо:

ArrayList<Double> list = new ArrayList<>(); // This is a bad idea!
30 голосов
/ 13 мая 2009

Сначала прочитайте это , затем прочитайте это и это . 9 из 10 вы будете использовать одну из этих двух реализаций.

На самом деле просто прочитайте Sun's Guide to the Collections framework .

21 голосов
/ 21 ноября 2011

Начиная с Java 7 у вас есть вывод типа для создания универсального экземпляра , поэтому нет необходимости дублировать универсальные параметры в правой части назначения:

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

Список фиксированного размера может быть определен как:

List<String> list = Arrays.asList("foo", "bar");

Для неизменяемых списков вы можете использовать библиотеку Guava :

List<String> list = ImmutableList.of("foo", "bar");
21 голосов
/ 13 мая 2009
//simple example creating a list form a string array

String[] myStrings = new String[] {"Elem1","Elem2","Elem3","Elem4","Elem5"};

List mylist = Arrays.asList(myStrings );

//getting an iterator object to browse list items

Iterator itr= mylist.iterator();

System.out.println("Displaying List Elements,");

while(itr.hasNext())

  System.out.println(itr.next());
20 голосов
/ 13 мая 2009

Список - это просто интерфейс, такой же как Set .

Подобно тому, как HashSet является реализацией набора, который имеет определенные свойства в отношении добавления / поиска / удаления производительности, ArrayList является простой реализацией списка.

Если вы посмотрите документацию для соответствующих интерфейсов, вы найдете «Все известные классы реализации» и сможете решить, какой из них больше подходит для ваших нужд.

Скорее всего, это ArrayList .

16 голосов
/ 22 июня 2015

List является интерфейсом, подобным Set, и имеет ArrayList и LinkedList как реализации общего назначения .

Мы можем создать список как:

 List<String> arrayList = new ArrayList<>();
 List<String> linkedList = new LinkedList<>(); 

Мы также можем создать список фиксированного размера как:

List<String> list = Arrays.asList("A", "B", "C");

Мы почти всегда будем использовать ArrayList вместо реализации LinkedList:

  1. LinkedList использует много места для объектов и плохо работает, когда у нас много элементов.
  2. Любая индексированная операция в LinkedList требует времени O (n) по сравнению с O (1) в ArrayList.
  3. Проверьте эту ссылку для получения дополнительной информации.

Список, созданный Arrays.asList выше, не может быть изменен структурно, но его элементы все еще могут быть изменены.

Java 8

Согласно doc , метод Collections.unmodifiableList возвращает неизменяемое представление указанного списка. Мы можем получить это как:

Collections.unmodifiableList(Arrays.asList("A", "B", "C"));

Java 9

Если мы используем Java 9 , тогда:

List<String> list = List.of("A", "B");

Java 10

Если мы находимся на Java 10, тогда метод Collectors.unmodifiableList вернет экземпляр действительно неизменяемого списка, представленного в Java 9. Проверьте этот ответ для получения дополнительной информации о разнице в Collections.unmodifiableList против Collectors.unmodifiableList in Java 10 .

9 голосов
/ 13 мая 2009
List list = new ArrayList();

Или с дженериками

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

Конечно, вы можете заменить строку любым типом переменной, например Integer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...