当我在Java中使用arraylists时遇到一个小问题。基本上我希望将一个数组存储在一个arraylist中。我知道arraylists可以容纳对象,所以它应该是可能的,但我不确定如何。
在大多数情况下,我的arraylist(从文件中解析)只是将一个字符作为字符串,但偶尔会有一系列字符,如下所示:
myarray
0 a
1 a
2 d
3 g
4 d
5 f,s,t
6 r
大部分时间我在位于第5位的字符串中唯一关心的字符是f,但偶尔我也可能需要查看s或t。我的解决方案是创建一个这样的数组:
subarray
0 f
1 s
2 t
并将子阵列存储在第5位。
myarray
0 a
1 a
2 d
3 g
4 d
5 subarray[f,s,t]
6 r
我尝试使用此代码执行此操作:
//for the length of the arraylist
for(int al = 0; al < myarray.size(); al++){
//check the size of the string
String value = myarray.get(al);
int strsz = value.length();
prse = value.split(dlmcma);
//if it is bigger than 1 then use a subarray
if(strsz > 1){
subarray[0] = prse[0];
subarray[1] = prse[1];
subarray[2] = prse[2];
}
//set subarray to the location of the string that was too long
//this is where it all goes horribly wrong
alt4.set(al, subarray[]);
}
这不是我想要的方式。它不允许我使用.set(int,array)。它只允许.set(int,string)。有没有人有建议?
答案 0 :(得分:2)
最简单的方法是使用ArrayList的ArrayList。
ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>();
然而,这可能不是最好的解决方案。您可能需要重新考虑数据模型并寻找更好的解决方案。
答案 1 :(得分:0)
只需将alt4.set(al, subarray[]);
更改为
alt4.add(subarray);
我认为alt4
是另一个定义的ArrayList<String[]>
。如果没有,请按以下方式定义:
List<String[]> alt4= new ArrayList<String[]>();
或
ArrayList<String[]> alt4= new ArrayList<String[]>();
答案 2 :(得分:0)
我的猜测是你将alt4声明为List<String>
,这就是为什么它不允许你将String数组设置为列表元素。您应该将其声明为List<String[]>
,并且每个元素只是单数,只需将其设置为String []数组的第0个元素,然后再将其添加到列表中。
答案 3 :(得分:0)
您可以切换到:
List<List<Character>> alt4 = new ArrayList<List<Character>>();
答案 4 :(得分:0)
可能这是你想要的
public class Tester {
List<String> myArrays = Arrays.asList(new String[] { "a", "a", "d", "g", "d", "f,s,t", "r" });
ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>();
private void manageArray() {
// for the length of the arraylist
ArrayList<String> subarray = new ArrayList<String>();
for(int al = 0; al < myArrays.size(); al++) {
// check the size of the string
String value = myArrays.get(al);
int strsz = value.length();
String prse[] = value.split(",");
// if it is bigger than 1 then use a subarray
if(strsz > 1) {
for(String string : prse) {
subarray.add(string);
}
}
// set subarray to the location of the string that was too long
// this is where it all goes horribly wrong
alt4.set(al, subarray);
}
}
}