二维数组是否可以存储一个整数和一个双精度数?

时间:2019-04-25 00:06:20

标签: java

所以,如果我的值是:

123,12.34

234,23.34

345,45.67

等像这样,是否可以使用二维数组设置这些值?

1 个答案:

答案 0 :(得分:1)

是,不是。

从技术上讲,您不能为每个数组维定义不同的静态类型。因此,您无法将int列与double列混合使用。即使是对象,也无法将Integer列与Double列混合使用。

如果只需要基元,则可以使用double[][]作为双精度字,它可以表示所有32位整数(请参见Representing integers in doubles)。但是从技术上讲,数组是全双精度的:没有什么可以阻止您在第一列中存储3.14之类的值。

对于对象,可以使用一种通用的基本类型(如果存在)。对于您的特定用例,所有数字类型都扩展了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]

请记住,这实际上将允许您在此数组中同时混合Float,Short甚至BigDecimal值,并允许null值。

因此,如果您需要严格控制数据类型,则可以选择创建一个自定义类,该类封装两个适当类型的单独数组:

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多维数组是“数组数组”(请参见Multi-dimensional arrays in Java)。这就是为什么只有一个类型:最里面的数组的类型。所有其他维度仅是到目标数组实例的间接访问级别(数组的数组)。