Java 如何创建二维列表

Java 如何创建二维列表,java,list,multidimensional-array,arraylist,Java,List,Multidimensional Array,Arraylist,这就是我的处境。我有8个区域。把它们当作建筑中的房间。每个区域都有我不知道的摄像机数量。例如,zone1可能有6个摄像头,zone2可能有3个摄像头,等等。现在我需要跟踪这些区域内的摄像头对象。我考虑添加二维列表,因为第一个维度可以包含区域,而第二个维度可以包含相机。我该怎么做 无论如何,如果您觉得有更好的方法,请让我知道使用HashMap,其中键是区域,值是相机列表 使用HashMap,其中键是区域,值是摄影机列表 您可以创建一组列表,其中键为区域 HashMap您可以创建一组列表,其中键为Z

这就是我的处境。我有8个区域。把它们当作建筑中的房间。每个区域都有我不知道的摄像机数量。例如,zone1可能有6个摄像头,zone2可能有3个摄像头,等等。现在我需要跟踪这些区域内的摄像头对象。我考虑添加二维列表,因为第一个维度可以包含区域,而第二个维度可以包含相机。我该怎么做


无论如何,如果您觉得有更好的方法,请让我知道

使用HashMap,其中键是区域,值是相机列表


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

您可以创建一组列表,其中键为区域

HashMap

您可以创建一组列表,其中键为Zone


HashMap

为什么不拥有一个包含多个摄像头的类区域作为成员

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映射分区

为什么不将一个拥有多个摄像头的类区域作为成员

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映射分区

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

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

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

building.put(zone, zone1cameras);
然后您可以将区域存储在另一个列表中,例如:

ArrayList<Zone> zones = new ArrayList<>();
zones.add(zone1);
这样你就可以做

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; }
}
ArrayList<Zone> zones = new ArrayList<>();
zones.add(new Zone().registerCamera(cam1).registerCamera(cam2).registerCamera(cam3));

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

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

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

building.put(zone, zone1cameras);
然后您可以将区域存储在另一个列表中,例如:

ArrayList<Zone> zones = new ArrayList<>();
zones.add(zone1);
这样你就可以做

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; }
}
ArrayList<Zone> zones = new ArrayList<>();
zones.add(new Zone().registerCamera(cam1).registerCamera(cam2).registerCamera(cam3));
如果Zone和Camera本身是类,则可以按如下方式使用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);
....
...
ArrayList<Camera> list = map.get(zone1);
list.add(camera3);list.add(camera4);
map.put(zone1,list);
如果Zone和Camera本身是类,则可以按如下方式使用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);
....
...
ArrayList<Camera> list = map.get(zone1);
list.add(camera3);list.add(camera4);
map.put(zone1,list);

创建一个区域对象怎么样?如果一个区域中有其他东西,那么创建一个区域对象尤其有用。然后在构造器中传递它拥有的摄像机数量

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();
}

创建一个区域对象怎么样?如果一个区域中有其他东西,那么创建一个区域对象尤其有用。然后在构造器中传递它拥有的摄像机数量

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();
}