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 li开发者_JAVA百科sts like: (1,2,3), (4,5,6) and (7,8,9)
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)
.
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 ) );
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
}
精彩评论