2013-04-08 27 views
0

我想從一個列表添加對象到另一個列表中的Java對象的成員。 要添加的對象具有標識另一個列表中唯一元素的成員。將列表A中的元素添加到特殊成員相等的列表B的元素

有沒有簡單的方法來做到這一點?

例如將每一名水手加入代表船隊的清單中。

class Sailor{ 
Integer ship_id; 
} 

class Ship { 
Integer ship_id; 
List<Sailor> sailors; 
} 

List<Sailor> sailors; 
List<Ship> fleet; 

回答

4

這樣做的最簡單方法是創建一個從Id到實際Ship對象的關聯。

例如,你可以對你的代碼Map<Integer, Ship>地方(這取決於結構,甚至可以作爲Ship靜態成員。

有了這個Map,它只是重複你的Sailors的問題,並增加了相應的Ship

Map<Integer, Ship> shipMap = ....; 

for(Sailor sailor: sailors) { 
    shipMap.get(sailor.shipId()).addSailor(sailor);  
} 
0

每一個水手添加到他的船在代表隊名單。

不太清楚這是什麼意思,但如果你重寫equals和ahscode正確(一致,1晶體管,對稱,relfexive)。然後您可以使用List.contains()來檢查一個對象是否在列表中。

0

從我的理解,你需要像下面:

//Add every sailor to his ship in a list representing the fleet. 
    public void addSailorToFleet(){ 
     for(Sailor sailor : sailors){ 
      for(Ship ship : fleet){ 
       if(sailor.ship_id == ship.ship_id){ 
        ship.sailors.add(sailor); 
       } 
      } 
     } 
    } 

這有O(n^2)複雜性。

另一種使用Map存儲引用(通過pcalcao)的解決方案爲空間換取時間。根據您的情況,您可以選擇其中一種。

使用Map存儲引用的另一個缺點是,您將始終需要在添加新船舶時更新地圖。