[英]Java ArrayList of Arrays?
我想創建一個沒有固定大小的mutli維數組。
我需要能夠添加String[2]
項目。
我試過看:
private ArrayList<String[]> action = new ArrayList<String[2]>();
但這不起作用。 有沒有人有任何其他想法?
應該
private ArrayList<String[]> action = new ArrayList<String[]>();
action.add(new String[2]);
...
您不能在generic參數中指定數組的大小,只能稍后將特定大小的數組添加到列表中。 這也意味着編譯器無法保證所有子陣列的大小相同,必須由您確保。
更好的解決方案可能是將其封裝在一個類中,您可以在其中確保數組的統一大小作為類型不變量。
BTW。 你應該更喜歡對接口進行編碼。
private ArrayList<String[]> action = new ArrayList<String[]>();
應該
private List<String[]> action = new ArrayList<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,如@PéterTörök所寫;
//Declaration of an ArrayList of String Arrays
ArrayList<String[]> listOfArrayList = new ArrayList<String[]>();
為此ArrayList分配不同的String Arrays時,每個String Array的長度都不同。
在以下示例中,添加了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,而不是您在問題中使用的那個。
最好使用List接口,如下所示;
//Declaration of an ArrayList of String Arrays
List<String[]> listOfArrayList = new ArrayList<String[]>();
ArrayList<String[]> action = new ArrayList<String[]>();
不需要String[2]
;
這非常有效。
ArrayList<String[]> a = new ArrayList<String[]>();
a.add(new String[3]);
a.get(0)[0] = "Zubair";
a.get(0)[1] = "Borkala";
a.get(0)[2] = "Kerala";
System.out.println(a.get(0)[1]);
結果將是
Borkala
像ArrayList action
一樣創建ArrayList action
。
在JDK 1.5或更高版本中使用ArrayList <string[]>
引用名稱。
在JDK 1.4或更低版本中使用ArrayList
引用名稱。
指定訪問說明符:
然后指定它將被分配的引用
action = new ArrayList<String[]>();
在JVM中, new
關鍵字將在運行時為對象分配內存。
您不應該在聲明的位置分配值,因為您要求的是沒有固定大小的值。
最后,您可以在ArrayList中使用add()
方法。 用得像
action.add(new string[how much you need])
它將在堆中分配特定的內存區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.