我需要創建一個包含多個基本類型的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...
你能幫助我嗎?
謝謝! :)
我需要創建一個包含多個基本類型的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...
你能幫助我嗎?
謝謝! :)
我認爲這是解決您的問題。我做了一個適用於整數,字符串和浮點數的代碼(其餘的可以完成)。
主要(與你的價值觀)
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
謝謝!我認爲你的解決方案對我更好! :) 你真棒! – user3449772
很高興幫助你:) – AdrianES
可以使用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);
這是如何回答這個問題的? – christopher
我已經改變了答案..感謝您的支持 – niiraj874u
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.)
}
有存儲混色乾脆利落,和簡單的方法在Java中以統一的方式輸入數據。所以你最好定義List對象來存儲行內容並準備寫入巨大的IF:
if (row[i] instanceof String) {
...
} else if (row[i] instanceof Integer) {
...
}
等等。我在使用protobuf時模擬了混合類型的字段。
和更多:忘記原語,如果你打算使用列表。不幸的是,Java泛型與原始類型不兼容。
由於您在數組中的項表示某種邏輯順序,因此您可以嘗試以類的數據結構的形式創建它們的表示形式。
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];
那麼它聽起來像你應該創建一個新類來表示單排......你試過了嗎?如果是這樣,你有什麼問題?你的問題目前還不清楚。 –
你需要創建一個對象數組,因爲你不能將它們存儲在標準數組中 –