【问题标题】:Efficient way to add/remove objects [ multiple attributes] [closed]添加/删除对象的有效方法[多个属性] [关闭]
【发布时间】:2015-01-15 11:43:54
【问题描述】:

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

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, “马自达”,120]。

  3. 如果与品牌不匹配,我想增加年份和成本。

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

有人知道吗?

【问题讨论】:

  • 告诉我们你写了什么代码?你在哪里卡住了?
  • 我有一种方法可以做到这一点,但我正在使用 for 和很多 if/else 语句。我正在寻找一个最好的方法来做到这一点

标签: java performance list


【解决方案1】:

这很难实现。您可以保留几个带有键 [year, cost][year, model] 的地图。将对应对象的列表索引作为map的值。

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

虽然蛮力方法需要 O(n) 读取和一次写入来添加新条目,但这种方法将其降低到在命中的情况下两次读取和两次写入以及在未命中的情况下进行两次读取和三次写入。

【讨论】:

    【解决方案2】:

    使用映射来存储键值对。 key 可以是 year + model 的组合,value 可以是 cost 也可以是整个 Car 对象。

    【讨论】:

    • 我希望你的意思是地图而不是设置?
    【解决方案3】:

    嗯,如果我理解正确的话,你想潜入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的列表

    【讨论】:

    • 这只是添加和删除列表的一个元素:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2015-07-17
    • 2014-04-04
    • 2022-07-21
    相关资源
    最近更新 更多