这是我的情况。我有 8zone
秒。将它们视为建筑物中的房间。每个zone
人都有我不知道的相机数量。例如,zone1 可能有 6 个凸轮,zone2 可能有 3 个凸轮等。现在我需要跟踪这些camera
区域内的这些对象。我想添加二维列表,因为它们的第一个维度可以包含,zone
而第二个维度可以包含camera
. 我怎样才能做到这一点?
无论如何,如果您觉得有更好的方法,请告诉我
这是我的情况。我有 8zone
秒。将它们视为建筑物中的房间。每个zone
人都有我不知道的相机数量。例如,zone1 可能有 6 个凸轮,zone2 可能有 3 个凸轮等。现在我需要跟踪这些camera
区域内的这些对象。我想添加二维列表,因为它们的第一个维度可以包含,zone
而第二个维度可以包含camera
. 我怎样才能做到这一点?
无论如何,如果您觉得有更好的方法,请告诉我
使用 HashMap,其中键是区域,值是相机列表。
http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html
您可以创建一个s 的HashMap,List
键为Zone
。
HashMap<Zone, List<Camera>>
为什么不拥有一个包含多个摄像机的类区域作为成员?
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);
.
.
ETC..
我更喜欢这个而不是多列表,因为您可以轻松地将更多属性添加到区域对象并从列表中访问它们。
您还可以为区域对象设置名称/id 属性,并在地图中按 id 映射区域;
好吧,一种方法是使用地图和列表:
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
s 存储在另一个列表中,例如:
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));
如果Zone
andCamera
本身就是类,那么您可以使用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 on 是Camera
. 和 zone1, zone2 .. 等等是对象Zone
如果你想为 zone1 添加更多的相机,那么你可以按照以下方式进行:
ArrayList<Camera> list = map.get(zone1);
list.add(camera3);list.add(camera4);
map.put(zone1,list);
如何创建一个 Zone 对象(如果一个 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();
}