Java ArrayList的数组?
我想创build一个没有固定大小的multidimensional array。
我需要能够添加String[2]项目。 
我曾试着看:
 private ArrayList<String[]> action = new ArrayList<String[2]>(); 
但是这不起作用。 有没有人有任何其他的想法?
应该
 private ArrayList<String[]> action = new ArrayList<String[]>(); action.add(new String[2]); ... 
您不能在generics参数中指定数组的大小,以后只能将特定大小的数组添加到列表中。 这也意味着编译器不能保证所有的子数组的大小相同,必须由您来保证。
一个更好的解决scheme可能是将其封装在一个类中,从而确保数组的统一大小作为types不变。
BTW。 你应该更喜欢编码一个接口。
 private ArrayList<String[]> action = new ArrayList<String[]>(); 
应该
 private List<String[]> action = new ArrayList<String[]>(); 
 由于string数组的大小在编译时是固定的,所以最好使用一个结构(如Pair )来强制两个字段,从而避免数组方法可能导致的运行时错误。 
码:
 由于Java不提供Pair类,因此您需要定义自己的。 
 class Pair<A, B> { public final A first; public final B second; public Pair(final A first, final B second) { this.first = first; this.second = second; } // // Override 'equals', 'hashcode' and 'toString' // } 
然后用它作为:
 List<Pair<String, String>> action = new ArrayList<Pair<String, String>>(); 
  [这里我使用了List因为它被认为是编程接口的一个好习惯。  ] 
 ArrayList<String[]> action = new ArrayList<String[]>(); 
 不需要String[2] ; 
正如已经回答的那样,你可以创build一个string数组ArrayList作为@PeterTörök写的;
  //Declaration of an ArrayList of String Arrays ArrayList<String[]> listOfArrayList = new ArrayList<String[]>(); 
将不同的string数组分配给此ArrayList时,每个string数组的长度将会不同。
在下面的例子中,添加了4个不同的string数组,它们的长度是变化的。
 String Array #1: len: 3 String Array #2: len: 1 String Array #3: len: 4 String Array #4: len: 2 
演示代码如下:
 import java.util.ArrayList; public class TestMultiArray { public static void main(String[] args) { //Declaration of an ArrayList of String Arrays ArrayList<String[]> listOfArrayList = new ArrayList<String[]>(); //Assignment of 4 different String Arrays with different lengths listOfArrayList.add( new String[]{"line1: test String 1","line1: test String 2","line1: test String 3"} ); listOfArrayList.add( new String[]{"line2: test String 1"} ); listOfArrayList.add( new String[]{"line3: test String 1","line3: test String 2","line3: test String 3", "line3: test String 4"} ); listOfArrayList.add( new String[]{"line4: test String 1","line4: test String 2"} ); // Printing out the ArrayList Contents of String Arrays // '$' is used to indicate the String elements of String Arrays for( int i = 0; i < listOfArrayList.size(); i++ ) { for( int j = 0; j < listOfArrayList.get(i).length; j++ ) System.out.printf(" $ " + listOfArrayList.get(i)[j]); System.out.println(); } } } 
产出如下;
  $ line1: test String 1 $ line1: test String 2 $ line1: test String 3 $ line2: test String 1 $ line3: test String 1 $ line3: test String 2 $ line3: test String 3 $ line3: test String 4 $ line4: test String 1 $ line4: test String 2 
另外通知你可以初始化一个新的Sting数组,如下所示;
 new String[]{ str1, str2, str3,... }; // Assuming str's are String objects 
所以这也是一样的;
 String[] newStringArray = { str1, str2, str3 }; // Assuming str's are String objects 
我已经写了这个演示只是为了表明没有ArrayList对象,所有的元素都是对String Arrays不同实例的引用,因此每个String Arrays的长度不一定是相同的,也不重要。
最后一个注意事项 :最好的做法是在List接口中使用ArrayList,而不是你在问题中使用的ArrayList。
如下所示使用List接口会更好一些;
  //Declaration of an ArrayList of String Arrays List<String[]> listOfArrayList = new ArrayList<String[]>(); 
1.首先你创build了像列表引用名字的动作
ArrayList操作;
  2.在jdk1.5或更高版本中,将被接受为ArrayList <string[]>引用名称; 
  3.在jdk1.4或更低版本中,将被接受为ArrayList引用名称; 
4.然后指定访问说明符,即a.public b.private c.protected
5.公共可以在任何地方访问。
6.私人在课堂上访问。
7.受保护的是在类和不同的包子类中访问的。
  8.然后,将在action = new ArrayList<String[]>();分配的引用action = new ArrayList<String[]>(); 
9.在jvm new关键字将为运行时的对象分配内存。
10.你不应该在宣布的地方分配价值,因为你没有固定的尺寸要求。
11.最后你可以在arraylist中使用add()方法。
  12.然后使用像action.add(new string[how much you need]) 。 
他将在堆中分配具体的内存区域。