有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java泛型类型向量的多维数组

想象一下,如果你愿意的话,一个由1x1x1块砖组成的10x10x10立方体。每个砖块必须可以通过x、y、z坐标访问。对于每一块砖,我还需要存储一个拥有该“砖”的人的名单

由于效率是绝对必要的,我想出了以下想法——一个3d矢量阵列。 注意——我已经创建了一个类,它存储了一个名字和其他信息(称为person)

//declaration
    protected Vector<person>[][][] position;

我想我必须为指针位置分配内存。我试过这个

position = new Vector<person>[10][10][10]; 

但是,我不能创建一个向量的通用数组,我只熟悉C++,java对我来说是新的。我知道java不喜欢用泛型类型声明数组?有人知道我该怎么解决这个问题吗

干杯


共 (2) 个答案

  1. # 1 楼答案

    在java中,您试图做的是不可能的,因为没有操作符重载(如在C++中)。简而言之,Java中的[]运算符仅为数组定义,不能重载。因此,访问Vector/ArrayList中元素的唯一方法是通过get()方法(或者通过Iterator或结合其他方法,但您可以看到图片)。类似地,您不能用这种方式定义多维ArrayList。你应该做的是 ArrayList<ArrayList<ArrayList<Person>>> people = new ArrayList<ArrayList<ArrayList<Person>>>() 然后用嵌套循环或任何你想要的方式初始化所有内部数组。 它看起来有点难看,而且由于ArrayList/Vector是一个动态集合,例如在第一个数组中添加新元素也需要初始化两个嵌套数组。因此,在设计方面,最好为该类编写某种形式的包装器,以便隔离该类中的逻辑

    Java中ArrayList和Vector的区别在于Vector是同步的(因此速度较慢),并且是默认的增长模式(Vector的大小是它的两倍,而ArrayList增长了50%)。否则,它们在功能和操作复杂性上几乎完全相同

  2. # 2 楼答案

    我也同意Ed.C的客观回答,但这似乎是可行的:

    @SuppressWarnings("unchecked")
    protected Vector<Person>[][][] position = new Vector[10][10][10];
    

    你跳过右边的钻石