0

我想将一个列表中的对象添加到 Java 中另一个列表中的对象成员中。要添加的对象有一个成员,该成员标识另一个列表中的唯一元素。

有没有简单的方法可以做到这一点?

例如,在代表舰队的列表中添加每个水手到他的船。

class Sailor{
 Integer ship_id;
}

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

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

3 回答 3

4

最简单的方法是创建从 Id 到实际Ship对象的关联。

例如,您可以Map<Integer, Ship>在代码中的某个位置(这取决于结构,甚至可以作为Ship.

有了这个Map,它只是一个迭代你的问题Sailors,并添加到相应的Ship.

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

for(Sailor sailor: sailors) {
    shipMap.get(sailor.shipId()).addSailor(sailor);    
}
于 2013-04-08T11:46:24.390 回答
0

在代表舰队的列表中添加每个水手到他的船上。

不太清楚这意味着什么,但如果你正确地覆盖了 equals 和 ahscode(一致的、传递的、对称的、relfexive)。然后,您可以使用List.contains()检查对象是否在列表中。

于 2013-04-08T11:45:43.077 回答
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 提供)以空间换时间。根据您的上下文,您可以选择其中任何一个。

使用地图存储参考的另一个缺点是,您总是需要在添加新船时更新地图。

于 2013-04-08T11:52:43.543 回答