创建一个元素为ArrayList<String>的数组。

31
我想创建一个包含ArrayList<String>元素的数组。
我已经尝试过。
ArrayList<String> name[] = new ArrayList<String>()[];

但似乎这并不起作用。


你想要一个ArrayList的ArrayList。为什么你会在某些情况下使用数组,而在其他情况下使用ArrayList呢? - Falmarri
2
我知道会有多少元素。使用ArrayList的ArrayList仍然更好吗? - sighol
1
这是一个重复的问题:https://dev59.com/3XE85IYBdhLWcg3wZyqt#2792743 - Tom
12个回答

38

您无法创建一个泛型类型的数组。

相反,您可以创建一个 ArrayList<ArrayList<String>>


1
嗨,在这种情况下,这里怎么可能实现呢? https://stackoverflow.com/questions/22747528/how-to-create-an-array-of-arraylists-in-java - Harsha

12

正确的方法是:

ArrayList<String> name[] = new ArrayList[9];

然而,这也行不通,因为你不能用泛型来创建一个数组,你所尝试做的是一个矩阵,应该像这样完成:

String name[][];

5
第一个确实可行,但会显示一条类型安全警告。 - user85421

11

我知道这已经有点过时了,但为了未来的查看,我仍然会回应这个问题。

如果你真的想要一个 ArrayList<String>[] 结构,你可以简单地创建一个扩展自 ArrayList 的类,并创建一个该类的数组:

public class StringArrayList extends ArrayList<String>{}

并且在您的实现中:

ArrayList<String> name[] = new StringArrayList[9];

这是一个示例:

package testspace.arrays;

import java.util.List;

public class TestStringArray {

    public static void main(String[] args) {
        List<String>[] arr = new StringArrayList[10];
        for(int i = 0; i < arr.length; i++){
            // CANNOT use generic 'new ArrayList<String>()'
            arr[i] = new StringArrayList(); 
            for(int j = 0; j < arr.length; j++){
                arr[i].add("list item #(" + j + "|" + i + ")");
            }
        }

        StringBuilder sb = new StringBuilder();
        for(final List<String> list : arr){
            for(final String str : list){
                sb.append(str + " ");
            }
            sb.append("\n");
        }
        System.out.println(sb.toString());
    }

}

注意 如果你使用以下语法 arr[i] = new ArrayList<String>(),会导致运行时错误。


5
这不是合理的面向对象编程,这种代码与具体实现非常耦合。 如果你需要这样做,那么你可能做错了什么。 如果这段代码不是你自己写的,那么写它的人很可能做错了什么。 如果你知道有多少元素(即使你不知道),为什么不使用 Map<Integer,List<String>>

2
ArrayList<ArrayList<String>> name= new ArrayList<ArrayList<String>>(/*capacity*/);

2
如果您确实需要一个ArrayList数组,您将需要逐个初始化数组的每个位置:
int size = 9; // 9 is just an example
// you can remove the annotation, but you'll be warned:
// Type safety: The expression of type ArrayList[] needs unchecked conversion 
// to conform to ArrayList<String>[]
@SuppressWarnings("unchecked")
ArrayList<String> name[] = new ArrayList[ size];
for( int i = 0; i < size; i++) {
    name[ i] = new ArrayList<String>();
}

0

ArrayList数组,使用循环的示例

//Declare
Object[] arrayLists = new Object[size];    

//Fill
for (int j=0; j < size; j++) {
     arrayLists[k]= generateAnArrayList(j);  //or whatnot
}

//Usage
for (int j=0; j < size; j++) {
    ArrayList<Long> al = (ArrayList<Long>) arrayLists[j];
    //do something here
}

0

有一种方法可以只对您的代码进行少量修改就能实现它。

ArrayList<String>[] name = new ArrayList[10]; 

这将给你一个ArrayList数组。


0
你可以尝试这个:
ArrayList[] arr=new ArrayList[5];
for(int i=0;i<5;i++)
     arr[i]=new ArrayList<String>();
arr[1].add("35");
arr[1].add("ME");
arr[1].add("HELLO");
System.out.println(arr[1]);

输出:

[35, ME, HELLO]

0
// This is the not correct way
ArrayList<String> name[] = new ArrayList<String>()[];

// This is the correct way
ArrayList<String> list[] = new ArrayList[2];

list[0] = new ArrayList();
list[1] = new ArrayList();

list[0].add("Some String 11");
list[0].add("Some String 22");

list[1].add("Some String 1111");
list[1].add("Some String 2222");

2
这个问题已经在7年前得到了回答。你的回答有什么新的价值呢? - Maciej Jureczko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接