2014-04-25 23 views
0

我需要創建一個包含多個基本類型的Java數組列表(精確地說,一個向量)。 例如,我想每一個矢量的行中看到這一點:Java中的ArrayList和更原始的類型togheter

row[0] --> "str1", 5, "str2", "str3", 3.5, 6, "str4"...etc... 
row[1] --> "str5", 6, "str6", "str7", 5.3, 8, "str8"...etc... 

你能幫助我嗎?

謝謝! :)

+5

那麼它聽起來像你應該創建一個新類來表示單排......你試過了嗎?如果是這樣,你有什麼問題?你的問題目前還不清楚。 –

+0

你需要創建一個對象數組,因爲你不能將它們存儲在標準數組中 –

回答

1

我認爲這是解決您的問題。我做了一個適用於整數,字符串和浮點數的代碼(其餘的可以完成)。

主要(與你的價值觀)

public static void main(String[] args) { 
     //Init 
     ArrayList<ArrayList<Something>> mainList = new ArrayList<>(); 
     ArrayList<Something> sublist1 = new ArrayList<>(); 
     ArrayList<Something> sublist2 = new ArrayList<>(); 
     //Fill array lists 
     sublist1.add(new Something("str1", 0)); 
     sublist1.add(new Something(5, 1)); 
     sublist1.add(new Something("str2", 0)); 
     sublist1.add(new Something("str3", 0)); 
     sublist1.add(new Something(3.5f, 2)); 
     //etc 
     sublist2.add(new Something("str5", 0)); 
     sublist2.add(new Something(6, 1)); 
     sublist2.add(new Something("str6", 0)); 
     sublist2.add(new Something("str7", 0)); 
     sublist2.add(new Something(5.3f, 2)); 
     //etc 
     //Add the two list in the main 
     mainList.add(sublist1); 
     mainList.add(sublist2); 
     //Iterator 
     int i = 0; 
     for (ArrayList<Something> sublist : mainList) { 
      i++; 
      System.out.println("Results from list " + i); 
      for (Something something : sublist) { 
       switch (something.getType()) { 
        case 0: { 
         System.out.println("String value: " + (String) something.getValue()); 
         break; 
        } 
        case 1: { 
         System.out.println("Integer value: " + (Integer) something.getValue()); 
         break; 
        } 
        case 2: { 
         System.out.println("Float value: " + (Float) something.getValue()); 
         break; 
        } 


       } 
      } 
     } 

    } 

類的東西:主要的

public static class Something { 

     private Object value; 
     private int type; 

     /** 
     * Constructor of Something class 
     * 
     * @param value 
     * @param type type 0 String <br/> 
     * type 1 Integer <br/> 
     * type 2 float .... 
     */ 
     public Something(Object value, int type) { 
      this.value = value; 
      this.type = type; 
     } 

     public Object getValue() { 
      return value; 
     } 

     public void setValue(Object value) { 
      this.value = value; 
     } 

     public int getType() { 
      return type; 
     } 

     public void setType(int type) { 
      this.type = type; 
     } 

    } 

輸出:

Results from list 1 
String value: str1 
Integer value: 5 
String value: str2 
String value: str3 
Float value: 3.5 
Results from list 2 
String value: str5 
Integer value: 6 
String value: str6 
String value: str7 
Float value: 5.3 
+0

謝謝!我認爲你的解決方案對我更好! :) 你真棒! – user3449772

+0

很高興幫助你:) – AdrianES

1

可以使用list..like的列表下方

Vector<Vector<Object>> list = new Vector<Vector<Object>>(); 
    Vector<Object> row1 = new Vector<Object>(); 
    row1.add(5); 
    row1.add("John"); 

    Vector<Object> row2 = new Vector<Object>(); 
    row1.add(1.1); 
    row1.add("Aby"); 

    list.add(row1); 
    list.add(row2); 
+3

這是如何回答這個問題的? – christopher

+0

我已經改變了答案..感謝您的支持 – niiraj874u

1

Java泛型不能包含基本類型。你必須使用相應的對象類型。例如整數或浮點數。

爲了把多種類型的對象放入容器聲明它舉行一個超:

Vector<Object> v = new Vector<Object>(); 
v.add("String"); 
v.add(new Integer(5)); 

記住,當你做v.get(0)您會收到Object類型的對象。你必須知道你想把它轉換回來的類型。

要檢查對象的運行時類型,你可以使用Object.getClass(),或者使用instanceof運營商這樣的已知類型的比較:

if(object instanceof String){ 
    // do something with a String 
}else{ 
    // do something with a Number (Integer etc.) 
} 
1

有存儲混色乾脆利落,和簡單的方法在Java中以統一的方式輸入數據。所以你最好定義List對象來存儲行內容並準備寫入巨大的IF:

if (row[i] instanceof String) { 
... 
} else if (row[i] instanceof Integer) { 
... 
} 

等等。我在使用protobuf時模擬了混合類型的字段。

和更多:忘記原語,如果你打算使用列表。不幸的是,Java泛型與原始類型不兼容。

1

由於您在數組中的項表示某種邏輯順序,因此您可以嘗試以類的數據結構的形式創建它們的表示形式。

class NameOfStructure { 
    private String str1; 
    private int int1; 
    private String str2; 
} 

稍後將該結構放入數組中。

NameOfStructure[] rows = new NameOfStructure[size]; 

NameOfStructure row = NameOfStructure[0]; 

String str1 = row.str1; 
int int1 = row.int1; 

另一種選擇是創建數組類型的Object [],但是您必須在從數組中檢索一個項目後將類型轉換爲預期類型。

Object[] row = new Object[size]; 
... 
String str1 = (String) row[0]; 
Integer int1 = (Integer) row[1];