如何从Java中的数组数组访问字段

时间:2018-02-10 09:07:20

标签: java arrays class arraylist

import java.util.*;

class Cube{
    int width;
    int height;

    public Cube(int width, int height){
        this.width = width;
        this.height = height;
    }

    public String toString(){
        String s = "[" + width + "," + height + "]";
        return s;
    }
}

class myClass {
    public static void main(String[] args) {
        LinkedList<Cube>[] myCubes;

        myCubes = new LinkedList[3];

        myCubes[0] = new LinkedList<Cube>();
        myCubes[1] = new LinkedList<Cube>();
        myCubes[2] = new LinkedList<Cube>();


        myCubes[0].add(new Cube(5,2));
        myCubes[0].add(new Cube(3,6));
        myCubes[1].add(new Cube(3,3));
        myCubes[1].add(new Cube(2,2));
        myCubes[2].add(new Cube(1,2));
        myCubes[2].add(new Cube(5,9));

    }
}

我知道我有一个数组数组。但是,我无法弄清楚如何从数组中的Cube实例访问单个值。

如果您能帮助展示如何访问单个字段,我将不胜感激。

例如,我如何单独访问值6

myCubes[0].add(new Cube(3,6));

我知道对于单个实例,您使用点运算符,例如

myCubes.width;
myCubes.height;

但是,我不知道如何从一组实例中访问单个字段。

我真的很感谢你的帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

正如其他人已经在评论中所示。

我自己试了一下。 如果它是一个数组数组,你可以简单地使用

myCubes[0][1].height

但是由于LinkedList不是数组而是链接列表,因此您需要使用链接列表的get方法从列表中获取元素。

System.out.print(myCubes[0].get(1).height);

答案 1 :(得分:0)

  

LinkedList<Cube>[] myCubes ...我知道我有一个数组数组

不,这不是数组数组,这是LinkedList的数组。到

  • 您需要的访问列表myCubes[index]
  • 但是要从列表中访问元素,您需要*someList*.get(index)

如果我们将这两者结合起来,我们会得到类似myCubes[0].get(1)的内容(就像您使用myCubes[0].add(new Cube(3,6));一样,您需要在列表中使用add方法 put 立方体)。

但通常我们应该避免泛型类型和数组。数组希望保证它们只保存有效值,因此它们会在运行时检查放置在其中的元素类型,以查看它们是否与数组类型匹配。例如,这段代码将编译:

String[] strArray = new String[10];
Object[] objArr = strArray;
objArr[0] = new Integer(1);

我们将得到 runtime ArrayStoreException,因为我们试图将Integer放入数组中,该数组应该仅包含字符串(即使我们通过Object[]引用进行了操作,类型数组仍然是String[],因为这是我们在new String[size]处决定的。

但是泛型的问题在于它们是erased at runtime。因此,可以使用像

这样的代码
List<String> strList = new ArrayList<>();
Object o = strList;
List<Integer> intList = (List<Integer>) o;
intList.add(1);
System.out.println(strList);//this prints [1] !!!

因此,当你看到泛型类型不是那么安全时(它的安全性主要存在于编译时),所以数组不喜欢它们,因为它们会降低它们的安全性。
因此,您应该使用另一个列表List<List<Cube>>而不是数组。这样编译器就不会抱怨混合数组和泛型类型(因为没有更多的数组 - 至少在我们的代码中)。您使用列表的代码可能如下所示:

List<List<Cube>> myCubes = new ArrayList<>();

myCubes.add(new LinkedList<>());
myCubes.add(new LinkedList<>());
myCubes.add(new LinkedList<>());

myCubes.get(0).add(new Cube(5,2));
myCubes.get(0).add(new Cube(3,6));
myCubes.get(1).add(new Cube(3,3));
myCubes.get(1).add(new Cube(2,2));
myCubes.get(2).add(new Cube(1,2));
myCubes.get(2).add(new Cube(5,9));

System.out.println(myCubes.get(0).get(1).width);
System.out.println(myCubes.get(0).get(1).height);
System.out.println(myCubes.get(0).get(1));