如何声明一个二维字符串数组列表?

29

我想要做类似于这样的事情:ArrayList<String<String>> mylist

我该如何创建它?

我该如何向外部和内部列表中添加元素?

并且我应该如何将内部列表转换为简单的数组列表?


8
你的意思是 ArrayList<ArrayList<String>> 吗? - keyser
8个回答

29

你可以选择

List<List<String>> ls2d = new ArrayList<List<String>>();
List<String> x = new ArrayList<String>();
x.add("Hello");
x.add("world!");
ls2d.add(x);

System.out.println(Arrays.deepToString(ls2d.toArray()));

我们如何按索引顺序打印列表ls2d。我的意思是先打印ls2d列表的第一个元素,然后是第二个元素,依此类推。 - Kasun Siyambalapitiya
@KasunSiyambalapitiya 可以使用像 forwhile这样的循环。例如:for(List<String> inner : ls2d) { System.out.println(Arrays.toString(ls2d.toArray())); } - Luiggi Mendoza
如何访问行中的元素? - Cardinal System
2
你为什么决定将外部List作为ArrayList,而让内部List成为List? - sbhatla
1
@sbhatla List 是一个接口,所以对象必须使用实现这个接口的具体类进行初始化,比如 ArrayList 或者 LinkedList - Luiggi Mendoza
2
为什么内部类仍然被初始化为“List”,而不是“ArrayList”? - sbhatla

12

第一个数组列表并不是一个字符串数组列表,它是一个ArrayList嵌套的ArrayList。

ArrayList<ArrayList<String>>

4
该死,我应该发表一个答案而不是评论:p - keyser
我该如何向第二个列表添加内容? - 124697
user521190,第一个数组列表不是字符串的数组列表,而是一个嵌套的数组列表。 - Yevgeny Simkin
我仍然不明白为什么人们要声明ArrayList而不是List,记住要面向接口进行开发。同时,请查看Java中的TypeList vs类型ArrayList - Luiggi Mendoza
2
我的意思是,如果你想教Java编程,你应该用正确的方式来教授,而不仅仅是能够运行的东西 :)。 - Luiggi Mendoza
显示剩余3条评论

3

有两种方法可以实现你想要的功能。我提供了两种方法的代码片段:

1.List<List<String>> lol = new ArrayList<List<String>>();

Scanner in = new Scanner(System.in);
int size = in.nextInt();

//Declare your two dimensional ArrayList of Strings. 
List< List<String>> lol = new ArrayList<List<String>>();

//Instantiate and Populate
for (int i=0;i<size;i++){
    int internalListSize = in.nextInt(); //the size of each internal list
    lol.add(new ArrayList<String>());
    for (int j=0;j<internalListSize;j++){
        String whateverYouWanttoPut = in.nextLine();
        lol.get(i).add(whateverYouWanttoPut);
    }
}

//Access Elements 
try {
    System.out.println(lol.get(0).get(4));
    System.out.println(lol.get(1).get(2));
    System.out.println(lol.get(3).get(2));
} catch (Exception e){
    System.out.println("ERROR!");
}     

2. ArrayList[] set = new ArrayList[n];

Scanner in = new Scanner(System.in);
int size = in.nextInt();
//Declare your two dimensional ArrayList of Strings.
ArrayList[] set = new ArrayList[size];

//Populate it. 
for(int i=0;i<size;i++){
    int innerSize = in.nextInt();
    set[i] = new ArrayList<String>();
    for(int j=0;j<innerSize;j++){  
        set[i].add(in.nextLine());                
    }
}        
try{
    System.out.println(set[0].get(1));
    System.out.println(set[1].get(2));
} catch(Exception e){
    System.out.println("ERROR!");
}

3
List<List<String>> array = new ArrayList<List<String>>();
...
array.add(new ArrayList<String>())
array.get(0).add("qqq");

array.get(0) - 是一个内部列表。


3
List<List<String>> super2dArray = new ArrayList<ArrayList<String>>()

这是一个包含字符串的arraylist数组。

同时,ArrayList<String<String>> mylist 没有意义,因为String不是一个集合/列表,但我认为你已经明白了。未来的读者可能不会明白。

参见此答案,了解为什么我选择在左侧使用 List


2
尝试这个:

试试看:

public class JavaTests {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

    String[ ][ ] test2 = new String[3][3];      //3 can be replace if you add more test2[?][?] = "RandomString"

        test2[0][0] = "String1";
        test2[0][1] = "String2";
        test2[0][2] = "String3";

        test2[1][0] = "String4";
        test2[1][1] = "String5";
        test2[1][2] = "String6";

        test2[2][0] = "String7";
        test2[2][1] = "String8";
        test2[2][2] = "String9";

        for (int i = 0; i <= 2; i++){
            for (int j = 0; j <= 2; j++){
                System.out.print(test2[i][j] +"\t");
            }
            System.out.println("\n");
        }  
        System.out.println("\n");      
    }
}

这难道不只是一个普通的数组吗? - undefined

0
创建如下所示的2D数组- 对于原始数据类型-
int[][] arr = new int[10][10];

针对自定义类 -

public class MyClass {
    int x;
    MyClass() { 
        this.x = 0
    }
}

MyClass[][] arr = new MyClass[10][10];
for (int i = 0; i < 10; ++i) {
    for (int j = 0; j < 10; ++j) {
        arr[i][j] = new MyClass();
    }
}

-1
我已经将@Luiggi Mendoza提供的答案代码重构为一个Java方法,您可以轻松地将其整合到您的开发中:
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class Post10768198 {
    public static List<List<String>> create2DStringArrayList() {
        List<List<String>> ls2d = new ArrayList<List<String>>();
        List<String> x = new ArrayList<String>();
        x.add("Hello");
        x.add("world!");
        ls2d.add(x);
        return ls2d;
    }
}

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