簡體   English   中英

Java Array Array of Arrays?

[英]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
  1. ArrayList action一樣創建ArrayList action

    在JDK 1.5或更高版本中使用ArrayList <string[]>引用名稱。

    在JDK 1.4或更低版本中使用ArrayList引用名稱。

  2. 指定訪問說明符:

    • 公共,可以隨處訪問
    • 私人,在課堂上訪問
    • 在類和不同的包子類中訪問受保護的
  3. 然后指定它將被分配的引用

     action = new ArrayList<String[]>(); 
  4. 在JVM中, new關鍵字將在運行時為對象分配內存。

    您不應該在聲明的位置分配值,因為您要求的是沒有固定大小的值。

  5. 最后,您可以在ArrayList中使用add()方法。 用得像

     action.add(new string[how much you need]) 

    它將在堆中分配特定的內存區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM