How do I initialize a two-dimensional List statically?

How can I initialize a multidimensional List statically?

This works:

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

But I'd like to init the list with some static lists like: (1,2,3), (4,5,6) and (7,8,9)

3 Answers

This is an old answer, but things have changed a bit. For java 9+ this can be done using the List.of() method which returns an immutable List which is a subclass of AbstractImmutableList.

import java.util.List;
List<List<Integer>> list = List.of( List.of(1, 2, 3), List.of(4, 5, 6), List.of(7, 8, 9) );

For older version of java or if one needs a mutable List the old answer still works:

2011 answer

If you create a helper method, the code looks a bit nicer. For example

public class Collections { public static <T> List<T> asList(T ... items) { List<T> list = new ArrayList<T>(); for (T item : items) { list.add(item); } return list; }
}

and then you can do (with a static import)

List<List<Integer>> list = asList( asList(1,2,3), asList(4,5,6), asList(7,8,9), );

Why I don't use Arrays.asList()

Arrays.asList() returns a class of type java.util.Arrays.ArrayList (it's an inner class of Arrays). The problem I've found is that it's VERY easy to think that one is using a java.lang.ArrayList, but their implementation are very, very different.

The comment above is also old, for java 9+ use List.of(E...elem).

12

You can do it this way:

import static java.util.Arrays.*;

...

List<List<Integer>> list = asList( asList( 1, 2, 3 ), asList( 4, 5, 6 ), asList( 6, 7, 8 ) );
4

You can do so by adding a static block in your code.

private static List<List<Integer>> list = new ArrayList<List<Integer>>();
static { List<Integer> innerList = new ArrayList<Integer>(3); innerList.add(1); innerList.add(2); innerList.add(3); list.add(innerList); //repeat
}
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like