java—遍历所有对象或创建Map什么是更好的解决方案

zyfwsgd6  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(270)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

四年前关门了。
改进这个问题
我有枚举:

public enum Colour {
   RED, BLUE, BLACK;
}

我还有汽车课:

public class Car {
   private int id;
   private Colour colour;
   //other fields, getters and setters
}

我有很多车在里面 Map<Integer, Car> MAP_OF_CARS . 例如,我必须显示所有红色的汽车。所以我的问题是,什么是更好的解决方案。遍历Map中的所有汽车或创建Map,其中汽车列表将由颜色定义?
第一种解决方案:

public List<Car> getCarsByColor(Colour colour) {
   List<Car> sameColour = new ArrayList<>();
   for (Car car : MAP_OF_CARS.values()) {
      if(car.getColour().equals(colour) {
         sameColour.add(car);
      }
   }
   return sameColour;
}

第二种解决方案:在创建新车对象时,我会将其添加到Map中,结果是:

Map<Colour, List<Car>> CARS_BY_COLOURS;
CARS_BY_COLOURS.put(Colour.RED, car1);

而不是for循环,我将这样做:

public List<Car> getCarsByColor(Colour colour) {
   return CARS_BY_COLOURS.get(colour);
}

哪种解决方案更专业?

fcy6dtqo

fcy6dtqo1#

这里没有“对”或“错”,而是什么更适合你的申请。
第一种解决方案总是通过所有的汽车。假设你有一个或多或少均匀分布的汽车颜色,这将意味着迭代三倍的汽车。
另一方面,第二种解决方案可以让您轻松访问所需颜色的汽车,但是在保存第二张Map时会有一些内存开销。
所有这些都归结为应用程序的需求。如果按照颜色来获得所有的汽车是一个罕见的操作,或者如果内存需求是一个问题,第一种解决方案可能是首选。如果获得所有特定颜色的汽车是应用程序中的常见操作,那么第二种选择可能会更好。

db2dz4w8

db2dz4w82#

什么是更好的解决方案。遍历Map中的所有汽车或创建Map,其中汽车列表将由颜色定义?
这取决于搜索频率和更新频率。
一般来说,如果您只需要两样东西(本例中的id和颜色),并行Map是最简单的解决方案。
如果你看的不是一对夫妇,你需要更好地考虑频率,不断更新你很少使用的Map是不理想的。
根据您拥有的对象和属性的数量,您可能还需要考虑使用外部数据存储方法,例如sql server(mysql、mssql或其他任何类型),它将为您进行大量此类优化。

相关问题