1 回答

TA貢獻1725條經(jīng)驗 獲得超8個贊
是和不是。
從技術上講,您不能為每個數(shù)組維度定義不同的靜態(tài)類型。因此,您不能將int
列與double
列混合。即使對于對象,您也不能將Integer
列與Double
列混合。
如果您只需要原語,您可以使用double[][]
double 可以表示所有 32 位整數(shù)(請參閱Representing integers in doubles)。但從技術上講,該數(shù)組是全雙精度數(shù):沒有什么可以阻止您存儲3.14
第一列中的值。
對于對象,您可以使用通用的基本類型(如果存在)。對于您的特定用例,所有數(shù)字類型都擴展,java.lang.Number
因此這有效:
@Test
public void testMixedNumbersArray() {
Number[][] array = new Number[3][2];
array[0][0] = 123; array[0][1] = 12.34;
array[1][0] = 234; array[1][1] = 23.34;
array[2][0] = 345; array[2][1] = 45.67;
for (Number[] x : array) {
System.out.println(Arrays.toString(x));
}
}
// outputs:
// [123, 12.34]
// [234, 23.34]
// [345, 45.67]
請記住,這實際上還允許您在此數(shù)組中混合 Float、Short、...甚至 BigDecimal 值,以及允許null值。
因此,如果您需要對數(shù)據(jù)類型進行嚴格控制,一個選項是創(chuàng)建一個自定義類,該類封裝兩個適當類型的單獨數(shù)組:
public class MyArray {
int[] col1;
double[] col2;
public MyArray(int size) {
col1 = new int[size];
col2 = new double[size];
}
// ... add get/set methods as needed, e.g.
public void setCol1(int pos, int value) {
col1[pos] = value;
}
public void setCol2(int pos, double value) {
col2[pos] = value;
}
}
要記住的最后一件事是 Java 多維數(shù)組是“數(shù)組的數(shù)組”(請參閱 Java 中的多維數(shù)組)。這就是為什么只有一種類型:最內層數(shù)組的類型。所有其他維度只是通往目標數(shù)組實例的間接級別(數(shù)組的數(shù)組)。
添加回答
舉報