Мы создаем Set
как:
Set myset = new HashSet()
Как мы создаем List
в Java?
Мы создаем Set
как:
Set myset = new HashSet()
Как мы создаем List
в Java?
Ответы:
List myList = new ArrayList();
или с дженериками ( Java 7 или более поздняя версия)
List<MyType> myList = new ArrayList<>();
или с дженериками (старые версии Java)
List<MyType> myList = new ArrayList<MyType>();
Кроме того, если вы хотите создать список, в котором есть что-то (хотя это будет фиксированный размер):
List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");
Позвольте мне подвести итог и добавить кое-что:
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
Ints.asList
не создает неизменный список, но список фиксированного размера, подкрепленный заданным массивом целых чисел (т.е. он поддерживает List.set(int, Object)
). Второй пример «Неизменяемого списка символов» также не является неизменным (я бы удалил эту строку).
Чтобы создать непустой список фиксированного размера (такие операции, как добавление, удаление и т. Д. Не поддерживаются):
List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported
Чтобы создать непустой изменяемый список:
List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));
Используя новые List.of(...)
статические фабричные методы:
List<Integer> immutableList = List.of(1, 2);
List<Integer> mutableList = new ArrayList<>(List.of(3, 4));
Используя вывод типа локальной переменной :
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!
Сначала прочитайте это , затем прочитайте это и это . 9 раз из 10 вы будете использовать одну из этих двух реализаций.
На самом деле, просто прочитайте Sun's Guide по структуре коллекций .
ArrayList
. Если я работаю только с концами списка, это deque (или очередь), и я использую ArrayDeque
реализацию. Причина в том, что, хотя реализации на основе массива могут тратить некоторую память на пустые слоты (когда я не могу предсказать необходимую емкость), для небольших коллекций это сопоставимо с накладными расходами всех экземпляров узла в связанном списке ( или deque). И в ответ я получаю произвольный доступ. Какое уникальное преимущество LinkedList
дает?
//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());
Начиная с Java 7, у вас есть вывод типов для создания универсального экземпляра , поэтому нет необходимости дублировать универсальные параметры в правой части назначения:
List<String> list = new ArrayList<>();
Список фиксированного размера может быть определен как:
List<String> list = Arrays.asList("foo", "bar");
Для неизменяемых списков вы можете использовать библиотеку Guava :
List<String> list = ImmutableList.of("foo", "bar");
Список просто интерфейс, как Set .
Подобно тому, как HashSet является реализацией Set, которая имеет определенные свойства в отношении добавления / поиска / удаления производительности, ArrayList является голой реализацией List.
Если вы посмотрите документацию для соответствующих интерфейсов, вы найдете «Все известные классы реализации» и сможете решить, какой из них больше подходит для ваших нужд.
Скорее всего, это ArrayList .
List
является интерфейсом как Set
и имеет ArrayList
и LinkedList
как реализации общего назначения .
Мы можем создать список как:
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
Мы также можем создать список фиксированного размера как:
List<String> list = Arrays.asList("A", "B", "C");
Мы почти всегда будем использовать в ArrayList
противоположность LinkedList
реализации:
LinkedList
использует много места для объектов и плохо работает, когда у нас много элементов.LinkedList
требует времени O (n) по сравнению с O (1) в ArrayList
.Список, созданный Arrays.asList
выше, не может быть изменен структурно, но его элементы все еще могут быть изменены.
Согласно документу , метод Collections.unmodifiableList
возвращает неизменяемое представление указанного списка. Мы можем получить это как:
Collections.unmodifiableList(Arrays.asList("A", "B", "C"));
Если мы используем Java 9, тогда:
List<String> list = List.of("A", "B");
В случае, если мы находимся на Java 10, метод Collectors.unmodifiableList
возвратит экземпляр действительно неизменяемого списка, представленного в Java 9. Проверьте этот ответ для получения дополнительной информации о разнице в Collections.unmodifiableList
vs Collectors.unmodifiableList
в Java 10 .
Иногда - но только очень редко - вместо нового ArrayList вы можете захотеть новый LinkedList. Начните с ArrayList, и если у вас есть проблемы с производительностью и доказательства того, что список является проблемой, и много добавлений и удалений в этот список - тогда - не раньше - переключитесь на LinkedList и посмотрите, улучшатся ли вещи. Но в основном придерживайтесь ArrayList и все будет хорошо.
List list = new ArrayList();
Или с дженериками
List<String> list = new ArrayList<String>();
Вы можете, конечно, заменить строку любым типом переменной, например Integer.
Один пример:
List somelist = new ArrayList();
Вы можете посмотреть на javadoc для List и найти все известные классы реализации List
интерфейса, которые включены в java api.
Используя Google Collections , вы можете использовать следующие методы в классе Lists
import com.google.common.collect.Lists;
// ...
List<String> strings = Lists.newArrayList();
List<Integer> integers = Lists.newLinkedList();
Существуют перегрузки для инициализации и инициализации varargs из Iterable<T>
.
Преимущество этих методов состоит в том, что вам не нужно явно указывать универсальный параметр, как это было бы с конструктором - компилятор выведет его из типа переменной.
Больше возможностей сделать то же самое с Java 8, не лучше, не хуже, просто по-другому, и если вы хотите проделать дополнительную работу со списками, Streams предоставит вам больше альтернатив (фильтр, отображение, уменьшение и т. Д.)
List<String> listA = Stream.of("a", "B", "C").collect(Collectors.toList());
List<Integer> listB = IntStream.range(10, 20).boxed().collect(Collectors.toList());
List<Double> listC = DoubleStream.generate(() -> { return new Random().nextDouble(); }).limit(10).boxed().collect(Collectors.toList());
LinkedList<Integer> listD = Stream.iterate(0, x -> x++).limit(10).collect(Collectors.toCollection(LinkedList::new));
С Java 9 вы можете сделать следующее для создания неизменяемого List
:
List<Integer> immutableList = List.of(1, 2, 3, 4, 5);
List<Integer> mutableList = new ArrayList<>(immutableList);
В качестве опции вы можете использовать двойную инициализацию здесь:
List<String> list = new ArrayList<String>(){
{
add("a");
add("b");
}
};
Есть много способов создать набор и список. HashSet и ArrayList - это только два примера. В наши дни также довольно распространено использование дженериков с коллекциями. Я предлагаю вам взглянуть на то, что они
Это хорошее введение для встроенных коллекций Java. http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html
List arrList = new ArrayList();
Лучше использовать дженерики, как указано ниже:
List<String> arrList = new ArrayList<String>();
arrList.add("one");
Если вы используете LinkedList.
List<String> lnkList = new LinkedList<String>();
Используя Eclipse Collections, вы можете создать список следующим образом:
List<String> list1 = Lists.mutable.empty();
List<String> list2 = Lists.mutable.of("One", "Two", "Three");
Если вы хотите неизменный список:
ImmutableList<String> list3 = Lists.immutable.empty();
ImmutableList<String> list4 = Lists.immutable.of("One", "Two", "Three");
Вы можете избежать автобокса, используя примитивные списки. Вот как вы можете создавать int списки:
MutableIntList list5 = IntLists.mutable.empty();
MutableIntList list6 = IntLists.mutable.of(1, 2, 3);
ImmutableIntList list7 = IntLists.immutable.empty();
ImmutableIntList list8 = IntLists.immutable.of(1, 2, 3);
Есть варианты для всех 8 примитивов.
MutableLongList longList = LongLists.mutable.of(1L, 2L, 3L);
MutableCharList charList = CharLists.mutable.of('a', 'b', 'c');
MutableShortList shortList = ShortLists.mutable.of((short) 1, (short) 2, (short) 3);
MutableByteList byteList = ByteLists.mutable.of((byte) 1, (byte) 2, (byte) 3);
MutableBooleanList booleanList = BooleanLists.mutable.of(true, false);
MutableFloatList floatList = FloatLists.mutable.of(1.0f, 2.0f, 3.0f);
MutableDoubleList doubleList = DoubleLists.mutable.of(1.0, 2.0, 3.0);
Примечание: я являюсь коммиттером для Eclipse Collections.
Ниже приведены некоторые способы создания списков.
Это создаст список с фиксированным размером, добавление / удаление элементов невозможно, java.lang.UnsupportedOperationException
если вы попытаетесь это сделать, вы получите список .
List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
Следующая версия представляет собой простой список, где вы можете добавлять / удалять любое количество элементов.
List<String> list = new ArrayList<>();
Это как создать LinkedList
в Java, если вам нужно делать частые вставки / удаления элементов в списке, вы должны использовать LinkedList
вместоArrayList
List<String> linkedList = new LinkedList<>();
Arrays.asList("Male", "Female")
.
Попробуй это:
List<String> messages = Arrays.asList("bla1", "bla2", "bla3");
Или:
List<String> list1 = Lists.mutable.empty(); // Empty
List<String> list2 = Lists.mutable.of("One", "Two", "Three");
Если вам нужен сериализуемый, неизменяемый список с одной сущностью, которую вы можете использовать:
List<String> singList = Collections.singletonList("stackoverlow");
Как объявление списка массивов в Java похоже
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
Существует множество способов создания и инициализации списка массивов в Java.
1) List list = new ArrayList();
2) List<type> myList = new ArrayList<>();
3) List<type> myList = new ArrayList<type>();
4) Using Utility class
List<Integer> list = Arrays.asList(8, 4);
Collections.unmodifiableList(Arrays.asList("a", "b", "c"));
5) Using static factory method
List<Integer> immutableList = List.of(1, 2);
6) Creation and initializing at a time
List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
Again you can create different types of list. All has their own characteristics
List a = new ArrayList();
List b = new LinkedList();
List c = new Vector();
List d = new Stack();
List e = new CopyOnWriteArrayList();