913

We create a Set as:

Set myset = new HashSet()

How do we create a List in Java?

0

25 Answers 25

1169
List myList = new ArrayList();

or with generics (Java 7 or later)

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

or with generics (Old java versions)

List<MyType> myList = new ArrayList<MyType>();
7
  • 80
    Note that ArrayList is not the only kind of List -- and, regarding the question, HashSet is not the only kind of Set.
    – slim
    Feb 11, 2013 at 14:25
  • 22
    I am surprised that no one has mentioned that you can look up the list interface in the Java documentation to get a definite list of all the classes that implement List: docs.oracle.com/javase/7/docs/api/java/util/List.html Jun 10, 2014 at 14:10
  • 5
    If you use an IDE you can also generally view a type hierarchy in there, which may be more convenient. In Eclipse the default shortcut is F4, and in IDEA it is Ctrl+H. Jun 10, 2014 at 14:28
  • 1
    From what I understand you cannot use generics with ArrayList in C# MSDN Feb 24, 2015 at 0:36
  • 5
    The second explicit type argument <MyType> can be replaced with just <> for Java 7 and 8.
    – Jannik
    Mar 30, 2017 at 13:08
591

Additionally, if you want to create a list that has things in it (though it will be fixed size):

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");
5
  • 18
    The caveat is that this type of list (the one returned by asList()) is immutable.
    – Avrom
    May 13, 2009 at 17:38
  • 81
    @Avron - wrong: it is only fixed size: you can not change the size, but you can change the content (caveat of the caveat?)
    – user85421
    May 13, 2009 at 21:02
  • 1
    if there's only one thing in the list, I use Collections.singletonList() instead of Arrays.asList(). (But, I guess, I don't know why.)
    – MikeB
    Nov 9, 2015 at 19:30
  • @MikeB if you don't know why then stick to the arrays.aslist
    – bharal
    Jan 30, 2020 at 15:10
  • Because intellij said so @bharal
    – notacorn
    Feb 17, 2020 at 20:56
213

Let me summarize and add something:

JDK

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

Guava

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

Immutable List

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

Empty immutable List

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

List of Characters

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

List of Integers

Ints.asList(1,2,3);                                             // Guava
2
  • 1
    Ints.asList does not create an immutable list, but a fixed-size list backed by given array of ints (i.e. it supports List.set(int, Object)). Second example of "Immutable List of Characters" isn't immutable either (I'd remove that line). Jan 23, 2014 at 15:37
  • 9
    Not using generics makes a really "good" example for any developer that will read this.
    – Natix
    Apr 16, 2014 at 12:19
95

In Java 8

To create a non-empty list of fixed size (operations like add, remove, etc., are not supported):

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

To create a non-empty mutable list:

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

In Java 9

Using a new List.of(...) static factory methods:

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

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

In Java 10

Using the Local Variable Type Inference:

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

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

var list3 = new ArrayList<String>();

And follow best practices...

Don't use raw types

Since Java 5, generics have been a part of the language - you should use them:

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

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

Program to interfaces

For example, program to the List interface:

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

Instead of:

ArrayList<Double> list = new ArrayList<>(); // This is a bad idea!
0
30

First read this, then read this and this. 9 times out of 10 you'll use one of those two implementations.

In fact, just read Sun's Guide to the Collections framework.

5
  • 11
    I'd even add "8 times out of 10" you'll use ArrayList, just because it simply doesn't matter in 9.9 times out of 10. May 13, 2009 at 20:03
  • 1
    LinkedList is semantically appropriate when you only really care about the ends. May 13, 2009 at 21:53
  • LinkedLists are excellent if you just are going to iterate over them. To mee, it seems as if linked lists are more elegant, but maybe it's just because i learned lisp before Java.
    – KarlP
    May 14, 2009 at 10:46
  • @Karlp Agreed. I would say it's about 50/50 most of the time between ArrayList and LinkedList, and the answer isn't always about the complexity of the operations; more often it's simply what feels right for the problem at hand. May 14, 2009 at 14:32
  • 1
    I almost always used ArrayList. If I'm only working with the the ends of a list, it's a deque (or queue) and I use the ArrayDeque implementation. The reason is that even though the array-based implementations might waste some memory on empty slots (when I can't predict the necessary capacity), for small collections this is is comparable to the overhead of all the node instances in a linked list (or deque). And in return, I get random access. What unique benefit does LinkedList provide?
    – erickson
    Aug 8, 2013 at 16:04
23

Since Java 7 you have type inference for generic instance creation, so there is no need to duplicate generic parameters on the right hand side of the assignment:

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

A fixed-size list can be defined as:

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

For immutable lists you can use the Guava library:

List<String> list = ImmutableList.of("foo", "bar");
1
  • I have a question regarding this declaration List<String> list = Arrays.asList("foo", "bar"); I am wondering whether list in the declaration is an object ?
    – user5447339
    Mar 12, 2017 at 1:03
21
//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());
21

List is an interface like Set and has ArrayList and LinkedList as general purpose implementations.

We can create List as:

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

We can also create a fixed-size list as:

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

We would almost always be using ArrayList opposed to LinkedList implementation:

  1. LinkedList uses a lot of space for objects and performs badly when we have lots of elements.
  2. Any indexed operation in LinkedList requires O(n) time compared to O(1) in ArrayList.
  3. Check this link for more information.

The list created by Arrays.asList above can not be modified structurally but its elements can still be modified.

Java 8

As per doc, the method Collections.unmodifiableList returns an unmodifiable view of the specified list. We can get it like:

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

Java 9

In case we are using Java 9 then:

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

Java 10

In case we are at Java 10 then the method Collectors.unmodifiableList will return an instance of truly unmodifiable list introduced in Java 9. Check this answer for more info about the difference in Collections.unmodifiableList vs Collectors.unmodifiableList in Java 10.

20

List is just an interface just as Set.

Like HashSet is an implementation of a Set which has certain properties in regards to add / lookup / remove performance, ArrayList is the bare implementation of a List.

If you have a look at the documentation for the respective interfaces you will find "All Known Implementing Classes" and you can decide which one is more suitable for your needs.

Chances are that it's ArrayList.

13
List list = new ArrayList();

Or with generics

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

You can, of course, replace string with any type of variable, such as Integer, also.

13

The following are some ways you can create lists.

  • This will create a list with fixed size, adding/removing elements is not possible, it will throw a java.lang.UnsupportedOperationException if you try to do so.
    List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
    List<String> fixedSizeList = Arrays.asList("Male", "Female");
    List<String> fixedSizeList = List.of("Male", "Female"); //from java9

  • The following version is a simple list where you can add/remove any number of elements.

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

  • This is how to create a LinkedList in java, If you need to do frequent insertion/deletion of elements on the list, you should use LinkedList instead of ArrayList

     List<String> linkedList = new LinkedList<>();
    
1
  • 6
    You can use Arrays.asList("Male", "Female").
    – Johny
    Aug 14, 2019 at 10:47
10

As declaration of array list in java is like

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable  

There is numerous way you can create and initialize array list in 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();
9

One example:

List somelist = new ArrayList();

You can look at the javadoc for List and find all known implementing classes of the List interface that are included with the java api.

9

Sometimes - but only very rarely - instead of a new ArrayList, you may want a new LinkedList. Start out with ArrayList and if you have performance problems and evidence that the list is the problem, and a lot of adding and deleting to that list - then - not before - switch to a LinkedList and see if things improve. But in the main, stick with ArrayList and all will be fine.

7

Using Google Collections, you could use the following methods in the Lists class

import com.google.common.collect.Lists;

// ...

List<String> strings = Lists.newArrayList();

List<Integer> integers = Lists.newLinkedList();

There are overloads for varargs initialization and initialising from an Iterable<T>.

The advantage of these methods is that you don't need to specify the generic parameter explicitly as you would with the constructor - the compiler will infer it from the type of the variable.

7

More options to do the same thing with Java 8, not better, not worse, just different and if you want to do some extra work with the lists, Streams will provide you more alternatives (filter, map, reduce, etc.)

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

As an option you can use double brace initialization here:

List<String> list = new ArrayList<String>(){
  {
   add("a");
   add("b");
  }
};
2
  • 2
    This is an expensive operation. You are creating an anonymous subclass of ArrayList here. Jul 6, 2014 at 10:16
  • @VikramBodicherla I agree. It's more about syntax sugar here. Jul 7, 2014 at 9:15
6
List<Object> nameOfList = new ArrayList<Object>();

You need to import List and ArrayList.

6

With Java 9, you are able to do the following to create an immutable List:

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

List<Integer> mutableList = new ArrayList<>(immutableList);
6

List can be created in many ways:

1 - Constructor Initialization

List is an interface, and the instances of List can be created in the following ways:

List<Integer> list=new ArrayList<Integer>();
List<Integer> llist=new LinkedList<Integer>();
List<Integer> stack=new Stack<Integer>();

2- Using Arrays.asList()

List<Integer> list=Arrays.asList(1, 2, 3);

3- Using Collections class methods

Empty List

List<Integer> list = Collections.EMPTY_LIST;

OR

List<Integer> list = Collections.emptyList();

Collections.addAll(list = new ArrayList<Integer>(), 1, 2, 3, 4);

Unmodifiable List

List<Integer> list = Collections
        .unmodifiableList(Arrays.asList(1, 2, 3));

Singleton List

List<Integer> list = Collections.singletonList(2);

You can find more way from the reference link below.

Reference:

https://www.geeksforgeeks.org/initializing-a-list-in-java/

5

There are many ways to create a Set and a List. HashSet and ArrayList are just two examples. It is also fairly common to use generics with collections these days. I suggest you have a look at what they are

This is a good introduction for java's builtin collections. http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html

5
List arrList = new ArrayList();

Its better you use generics as suggested below:

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

arrList.add("one");

Incase you use LinkedList.

List<String> lnkList = new LinkedList<String>();
4

Using Eclipse Collections you can create a List like this:

List<String> list1 = Lists.mutable.empty();
List<String> list2 = Lists.mutable.of("One", "Two", "Three");

If you want an immutable list:

ImmutableList<String> list3 = Lists.immutable.empty();
ImmutableList<String> list4 = Lists.immutable.of("One", "Two", "Three");

You can avoid auto-boxing by using primitive lists. Here's how you'd create int lists:

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

There are variants for all 8 primitives.

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

Note: I am a committer for Eclipse Collections.

3

Try this:

List<String> messages = Arrays.asList("bla1", "bla2", "bla3");

Or:

List<String> list1 = Lists.mutable.empty(); // Empty
List<String> list2 = Lists.mutable.of("One", "Two", "Three");
3

If you need a serializable, immutable list with a single entity you can use:

List<String> singList = Collections.singletonList("stackoverlow");

Not the answer you're looking for? Browse other questions tagged or ask your own question.