Ми створюємо 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
не створює незмінний список, але список фіксованого розміру, підкріплений заданим масивом ints (тобто він підтримує 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 ви будете використовувати одну з цих двох реалізацій.
Насправді, просто прочитайте Посібник Соня до рамки колекцій .
ArrayList
. Якщо я працюю лише з кінцями списку, це deque (або черга), і я використовую ArrayDeque
реалізацію. Причина полягає в тому, що навіть незважаючи на те, що реалізація на основі масиву може втратити деяку пам’ять на порожніх слотах (коли я не можу передбачити необхідну ємність), для невеликих колекцій це порівнянно з накладними витратами всіх примірників вузлів у пов'язаному списку ( або деке). А натомість я отримую випадковий доступ. Яку унікальну вигоду 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 - це реалізація набору, який має певні властивості щодо додавання / пошуку / видалення продуктивності, ArrayList - це гола реалізація списку.
Якщо ви ознайомитесь з документацією для відповідних інтерфейсів, ви знайдете «Усі відомі класи впровадження» та зможете вирішити, який із них краще підходить для ваших потреб.
Ймовірно, що це 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
вище, не може бути змінений структурно, але його елементи все ще можуть бути змінені.
Відповідно до doc , метод 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
порівнянні 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 , ви можете використовувати наступні методи у класі Списки
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));
Тут ви можете використовувати подвійну дужку ініціалізації:
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, ви можете створити такий список:
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.
Нижче наведено кілька способів створення списків.
Це створить список із фіксованим розміром, додавання / видалення елементів неможливо, воно буде викинуто, 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();