2016-04-15 86 views
0

我已經通過類似下面的方法:如何在Java中以不同數量的行存儲數據?

{ 
    {"First", "John", "Male"}, 
    {"Second", "Michelle", "Female"}, 
    . 
    . 
    . 
} 

在上述情況下,我知道列的這一數字是固定的,即。 3但我不知道行數。有時行可以是2或行可以是10.行數有所不同。

我想存儲這樣的對象。我試過:

String[][] ar = new String[][3]; 

但是這不被支持。你能否爲這個問題提供一些另外的解決方案?

+1

爲什麼不使用'List'? –

回答

7

Java不支持未知大小的數組,這就是爲什麼像new String[][3]這樣的語句不能編譯的原因。

List接口實際上可以起到類似的目的,所以你可以這樣做:

List<String[]> listOfArrays = new ArrayList<String[]>(); 
+0

非常感謝Konstantin Yovkov提供的最佳解決方案! – TDHM

+0

不客氣。 –

0

假設你想避免使用集合用繩子堅持,你可以簡單地作一個假設,有三根弦,和只需將它分配給一個數組數組就可以了。

String [][] ar = { 
        {"First", "John", "Male"}, 
        {"Second", "Michelle", "Female"}, 
        {"Third", "John", "Male"}, 
       }; 

然後當你引用它時,不要過去第三個元素。

for (int i=0;i<3;i++){ 
    // do something with ar[0][i] 
} 

對於簡單的例子,這是好的,但是當你進入更高級的編碼時,你最好在看List類型。

0

使用像@ konstantin-yovkovworks或@ergonaut這樣的無界列表或數組的答案。而且,這正是你所要求的。但是,當這樣做時,主叫方和被叫方之間的合同非常薄弱。這不可靠。被調用的方法在使用它之前需要檢查所有內容,因爲編譯器沒有明確定義使用約定。

一般來說,使用明確的合同要好得多。根據你的情況,應該是這樣的:

public final class Row { 

    public final String rank; 
    public final String name; 
    public final String sex; 

    public Row(final String rank, final String name, final String sex) { 
     this.rank = rank; 
     this.name = name; 
     this.sex = sex; 
    } 

} 

被調用API函數就可以了,例如:

public void calledMethod(Row ... rows); 

public void calledMethod(Row[] rows); 

而且,它可以像使用:

calledMethod(
    new Row("First", "John", "Male"), 
    new Row("Second", "Michelle", "Female"), 
    , 
    , 
); 

This is far mo那些稍後需要閱讀你的代碼的人更加可靠和容易理解。

相關問題