简体   繁体   中英

How to use List, ArrayList and/and Array to create a 2-dimensional array in Java

I'm fairly new to Java and having problems finding a structure to do the following.

I want a fixed length array. Each item to be a variable length array (or list) holding strings. So I've tried...

ArrayList<String>[] wordList = new ArrayList[maxWordLength];

I get a slapped wrist from Java for "Main.java uses unchecked or unsafe operations." and when I try to add an item I get "java.lang.NullPointerException"

wordList[oneWord.length()-1].add(oneWord);

How should I create my structure to keep Java happy?

Java doesn't like arrays of generic types. (See Restrictions on Generics in the Java tutorials.) Instead, use a list of lists:

List<List<String>> wordList = new ArrayList<>(maxWordLength);

This creates a list with an initial capacity of maxWordLength that can contain lists of String . The initial size (as opposed to capacity) will be 0. Then you can add individual lists of strings to wordList . To avoid a NullPointerException later, you should fill wordList with empty lists to start with:

for (int i = 0; i < maxWordLength; i++) {
    wordList.add(new ArrayList<>());
}

Finally, you can add a word to a particular list in wordList with:

wordList.get(oneWord.length() - 1).add(oneWord);

This doesn't force wordList to be of fixed length, but otherwise should meet your requirements.

Keep it simple: Array with all elements as array of the Strings:

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

List<String> stringArray = Arrays.asList("String1", "String2");

listOfStringsArray.add(stringArray);

List is the interface that concrete classes such as ArrayList and LinkedList must implement.

ArrayList is a List that is optimized for sequential reading, and adding, and is backed by an internal array.

ArrayList<blah> or List<blah> is a List that contains objects that inherits blah (or if it is an interface, objects that implement it.)

ArrayList[] is actually an array of ArrayList s when you new ArrayList[x] that really means create an array of x length that contains ArrayList s. Each of the ArrayList s are not assigned, and so it's an uninitialized object, by default, it is null in many compilers but you can't depend on that.

So, let's say you create this fixed length array that contains a variable length list. you either have to do a loop over the array and say wordList[i] = new ArrayList<String>() or you have to do a nullcheck before you assign it and create a new ArrayList on each assignment

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM