我想要做类似于这样的事情:ArrayList<String<String>> mylist
我该如何创建它?
我该如何向外部和内部列表中添加元素?
并且我应该如何将内部列表转换为简单的数组列表?
你可以选择
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 Siyambalapitiyafor
或 while
这样的循环。例如:for(List<String> inner : ls2d) { System.out.println(Arrays.toString(ls2d.toArray())); }
。 - Luiggi MendozaList
是一个接口,所以对象必须使用实现这个接口的具体类进行初始化,比如 ArrayList
或者 LinkedList
。 - Luiggi Mendoza第一个数组列表并不是一个字符串数组列表,它是一个ArrayList嵌套的ArrayList。
ArrayList<ArrayList<String>>
有两种方法可以实现你想要的功能。我提供了两种方法的代码片段:
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!");
}
List<List<String>> array = new ArrayList<List<String>>();
...
array.add(new ArrayList<String>())
array.get(0).add("qqq");
array.get(0) - 是一个内部列表。
List<List<String>> super2dArray = new ArrayList<ArrayList<String>>()
这是一个包含字符串的arraylist数组。
同时,ArrayList<String<String>> mylist
没有意义,因为String不是一个集合/列表,但我认为你已经明白了。未来的读者可能不会明白。
参见此答案,了解为什么我选择在左侧使用 List
。
试试看:
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");
}
}
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();
}
}
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;
}
}
ArrayList<ArrayList<String>>
吗? - keyser