add/remove 对象 [ 多个属性 ] 的有效方法

Efficient way to add/remove objects [ multiple attributes]

我正在寻找一种有效的方法来将具有某些规则的对象添加到列表中。 比如我有这个对象

Car [int year, String brand, int cost]

假设我有一个包含以下值的列表:

[2011, "Renault", 100]
[2011, "Mazda", 120]
[2011, "Ferrari", 150]    

[2011, "Mazda", 100]
[2011, "Ferrari", 130]
[2011, "Renault", 200]

规则:

  1. 如果我想要一辆车[2011, Mazda, 150] 我会更换[2011, Mazda, 120],更新费用。

  2. 如果我要加车有Car[2011, Renault, 120] 我想更换[2011、"Mazda"、120]。

  3. 如果没有匹配的品牌,我想添加年份和成本。

所以,我想要一种有效的方法来匹配某些属性,并使用此规则添加对象。

有人知道吗?

使用映射来存储键值对。 Key 可以是 year + model 的组合,value 可以只是成本或整个 Car 对象。

嗯,如果我没听错的话,你想深入 Lists。它们非常简单:

List<Car> carList = new ArrayList<Car>();
Car mazda = new Car(2011, "Mazda", 150);
carList.add(mazda);

要移除汽车:

Car mazda = new Car(2011, "Mazda", 150);
carList.add(mazda);
carList.remove(mazda); // no more mazda...

有关 Java API

列表的更多信息

这很难实现。您可以保留几个键为 [year, cost][year, model] 的地图。给出相应对象的列表索引作为映射的值。

每次添加对象时,您都会选择两个属性,从中创建键,并检查它是否存在于地图中。如果是,则替换相应的对象,如果不是,则添加一个条目。

虽然蛮力方法需要 O(n) 次读取和一次写入来添加新条目,但这种方法在命中的情况下将其减少到两次读取和两次写入,在命中的情况下减少到两次读取和三次写入一个小姐。