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]
规则:
如果我想要一辆车[2011, Mazda, 150] 我会更换[2011, Mazda, 120],更新费用。
如果我要加车有Car[2011, Renault, 120] 我想更换[2011、"Mazda"、120]。
如果没有匹配的品牌,我想添加年份和成本。
所以,我想要一种有效的方法来匹配某些属性,并使用此规则添加对象。
有人知道吗?
使用映射来存储键值对。 Key 可以是 year + model 的组合,value 可以只是成本或整个 Car 对象。
嗯,如果我没听错的话,你想深入 List
s。它们非常简单:
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)
次读取和一次写入来添加新条目,但这种方法在命中的情况下将其减少到两次读取和两次写入,在命中的情况下减少到两次读取和三次写入一个小姐。
我正在寻找一种有效的方法来将具有某些规则的对象添加到列表中。 比如我有这个对象
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]
规则:
如果我想要一辆车[2011, Mazda, 150] 我会更换[2011, Mazda, 120],更新费用。
如果我要加车有Car[2011, Renault, 120] 我想更换[2011、"Mazda"、120]。
如果没有匹配的品牌,我想添加年份和成本。
所以,我想要一种有效的方法来匹配某些属性,并使用此规则添加对象。
有人知道吗?
使用映射来存储键值对。 Key 可以是 year + model 的组合,value 可以只是成本或整个 Car 对象。
嗯,如果我没听错的话,你想深入 List
s。它们非常简单:
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)
次读取和一次写入来添加新条目,但这种方法在命中的情况下将其减少到两次读取和两次写入,在命中的情况下减少到两次读取和三次写入一个小姐。