2013-03-22 51 views
1

這是我的情況。我有8 zone s。將它們視爲建築物中的房間。每個zone得到了我不知道的相機數量。例如,zone1可能有6個凸輪,zone2可能有3個凸輪等。現在我需要跟蹤這些區域內的這些camera對象。我想添加2維列表,因爲它們的第一維可以包含zone,而第二維可以包含camera。我怎樣才能做到這一點?如何創建2維列表

無論如何,如果你覺得有一個更好的辦法,請讓我知道

回答

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); 
+0

感謝您的幫助:) – 2013-03-24 17:53:28

1

您可以創建ListHashMap A S,關鍵是Zone

HashMap<Zone, List<Camera>>

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映射區域;

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

如果您想獲得c razy,你可以鏈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)); 
0

如何創建區域對象(如果區域永遠不會有別的東西特別有幫助在裏面)。然後在構造函數中傳遞它擁有的相機數量。

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