Java 在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

在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
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”等值的列表,如果您感兴趣的是单个字符,就不需要分隔符和拆分。是的。我今天会重新考虑。谢谢