将列表A中的元素添加到列表B的元素中,其中特殊成员相等

时间:2013-04-08 11:38:19

标签: java arraylist

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

有一种简单的方法吗?

e.g。在代表船队的清单中将每个水手添加到他的船上。

class Sailor{
 Integer ship_id;
}

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

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

3 个答案:

答案 0 :(得分:4)

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

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

拥有此Map,只需迭代Sailors,然后添加到相应的Ship

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

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

答案 1 :(得分:0)

  

将每个水手加到他的船上,代表船队。

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

答案 2 :(得分: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存储引用的另一个缺点是,您总是需要在添加新Ships时更新Map。