如何创建二维列表

时间:2013-03-22 19:20:10

标签: java list multidimensional-array arraylist

这是我的情况。我有8 zone秒。将它们视为建筑物中的房间。每个zone都有我不知道的相机数量。例如,zone1可能有6个凸轮,zone2可能有3个凸轮等。现在我需要跟踪这些区域内的这些camera个对象。我想添加二维列表,因为它们第一维可以包含zone,而第二维可以包含camera。我怎么能这样做?

无论如何,如果您觉得有更好的方法,请告诉我

6 个答案:

答案 0 :(得分:1)

使用HashMap,其中键是区域,值是摄像机列表。

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

答案 1 :(得分:1)

您可以创建HashMap List个,密钥为Zone

HashMap<Zone, List<Camera>>

答案 2 :(得分:1)

为什么不将具有相机数量的类区域作为成员?

public class Zone {

    private int numOfCameras;

    public Zone(int numOfCameras) {
        this.numOfCameras = numOfCameras;
    }  
}

然后您可以轻松创建区域列表:

List<Zone> zonesList = new ArrayList<Zone>();
zoneList.add(new Zone(6);
zoneList.add(new Zone(8);
.
.

等。

我更喜欢这个而不是多列表,因为您可以轻松地向区域对象添加更多属性并从列表中访问它们。

您还可以为区域对象指定名称/ ID属性,并在地图中按ID映射区域;

答案 3 :(得分:1)

嗯,一种方法是使用地图和列表:

HashMap<Zone, ArrayList<Camera>> building = new HashMap<>();

ArrayList<Camera> zone1cameras = new ArrayList<>();
zone1cameras.add(camera1);
zone1cameras.add(camera2);
...

building.put(zone, zone1cameras);

但是如果你已经拥有Zone个对象,为什么不能像

那样
public class Zone
{
    // Members
    private ArrayList<Camera> cameras = new ArrayList<>();

    // Methods 
    public void registerCamera(Camera c){ cameras.add(c); }
    public List<Camera> getCameras(){ return cameras; }
}

然后你可以将Zone存储在另一个列表中,例如:

ArrayList<Zone> zones = new ArrayList<>();
zones.add(zone1);

如果你想发疯,你可以链接registerCamera方法,如:

public class Zone
{
    // Members
    private ArrayList<Camera> cameras = new ArrayList<>();

    // Methods 
    public Zone registerCamera(Camera c){ cameras.add(c); return this; }
    public List<Camera> getCameras(){ return cameras; }
}

这将允许您执行类似

的操作
ArrayList<Zone> zones = new ArrayList<>();
zones.add(new Zone().registerCamera(cam1).registerCamera(cam2).registerCamera(cam3));

答案 4 :(得分:1)

如果ZoneCamera本身是类,那么您可以使用HashMap,如下所示:

Map<Zone,ArrayList<Camera>> map = new HashMap<Zone,ArrayList<Camera>>();
ArrayList<Camera> list1 = new ArrayList<Camera>();
list1.add(camera1);list1.add(camera2);
map.put(zone1,list1);
ArrayList<Camera> list2 = new ArrayList<Camera>();
 list2.add(camera1);list2.add(camera2);list2.add(camera3);
map.put(zone2,list2);
....
...

其中camera1,camera2 ..so是Camera的对象。而zone1,zone2 ......等等是Zone的对象 如果你想为zone1添加更多相机,那么你可以按照以下步骤进行操作:

ArrayList<Camera> list = map.get(zone1);
list.add(camera3);list.add(camera4);
map.put(zone1,list);

答案 5 :(得分:0)

如何创建一个Zone对象(如果某个区域中还有其他内容,则会特别有用)。然后在构造函数中传递它拥有的相机数量。

public class Zone {

    private int numOfCameras;
    private int zoneNumber;

    public Zone(_numOfCameras, _zoneNumber) {
        numOfCameras = _numOfCameras;
        zoneNumber = _zoneNumber;
    }

    //getters and setters
    ...
}

如果你需要保留一个区域列表,你可以实例化一个区域数组并将其添加到数组中:

private Zone[] zones;

要了解区域中有多少台摄像机,您可以执行此类操作(假设区域按顺序编号为1-8):

public int getNumberOfCamerasByZone(i){ //pass in the zone number you are wanting
    return zones[i].getNumberofCameras();
}