Java 在arraylist中存储对象
在Java中使用ArrayList时遇到一个小问题。实际上,我希望在arraylist中存储一个数组。我知道ArrayList可以保存对象,所以这应该是可能的,但我不确定如何保存 在大多数情况下,我的arraylist(从文件解析而来)只是将一个字符作为字符串保存,但偶尔它会包含一系列字符,如下所示:Java 在arraylist中存储对象,java,arraylist,multidimensional-array,Java,Arraylist,Multidimensional Array,在Java中使用ArrayList时遇到一个小问题。实际上,我希望在arraylist中存储一个数组。我知道ArrayList可以保存对象,所以这应该是可能的,但我不确定如何保存 在大多数情况下,我的arraylist(从文件解析而来)只是将一个字符作为字符串保存,但偶尔它会包含一系列字符,如下所示: myarray 0 a 1 a 2 d 3 g 4 d 5 f,s,t 6 r subarray 0 f 1 s
myarray
0 a
1 a
2 d
3 g
4 d
5 f,s,t
6 r
subarray
0 f
1 s
2 t
大多数时候,我关心的位于位置5的字符串中唯一的字符是f,但有时我可能也需要查看s或t。我的解决方案是制作如下数组:
myarray
0 a
1 a
2 d
3 g
4 d
5 f,s,t
6 r
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[]);
}
//获取arraylist的长度
对于(int-al=0;al1){
子阵[0]=prse[0];
子阵[1]=prse[1];
子阵[2]=prse[2];
}
//将子数组设置为过长字符串的位置
//这就是一切出了严重错误的地方
alt4.集合(al,子阵列[]);
}
但这不是我想要的方式。它不允许我设置.set(int,array)。它只允许.set(int,string)。有人有什么建议吗?最简单的方法是使用ArrayList中的ArrayList
ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>();
ArrayList alt4=新的ArrayList();
然而,这可能不是最好的解决方案。您可能需要重新考虑您的数据模型,并寻找更好的解决方案。只需更改alt4.set(al,subarray[])代码>到
alt4.add(subarray);
我假设alt4
是另一个定义的ArrayList
。如果不是,则定义如下:
List<String[]> alt4= new ArrayList<String[]>();
List alt4=new ArrayList();
或
ArrayList alt4=新的ArrayList();
我的猜测是,您将alt4声明为List
,这就是为什么它不允许您将字符串数组设置为List元素的原因。您应该将其声明为List
,如果每个元素都是单数,只需将其设置为字符串[]数组的第0个元素,然后再将其添加到列表中。您可以切换到:
List<List<Character>> alt4 = new ArrayList<List<Character>>();
List alt4=new ArrayList();
也许这就是你想要的
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);
}
}
}
公共类测试器{
List myArrays=Arrays.asList(新字符串[]{“a”、“a”、“d”、“g”、“d”、“f、s、t”、“r”});
ArrayList alt4=新的ArrayList();
私有void manageArray(){
//对于arraylist的长度
ArrayList子数组=新的ArrayList();
对于(int-al=0;al1){
for(字符串:prse){
子数组。添加(字符串);
}
}
//将子数组设置为过长字符串的位置
//这就是一切出了严重错误的地方
alt4.集合(al,子阵列);
}
}
}
什么是alt4(对象声明)?您知道字符串是一个带有方法的char[],对吗?只要使用一个带有“a”或“fst”等值的列表,如果您感兴趣的是单个字符,就不需要分隔符和拆分。是的。我今天会重新考虑。谢谢