Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遍历所有对象或创建贴图。什么是更好的解决方案_Java_For Loop_Hashmap - Fatal编程技术网

Java 遍历所有对象或创建贴图。什么是更好的解决方案

Java 遍历所有对象或创建贴图。什么是更好的解决方案,java,for-loop,hashmap,Java,For Loop,Hashmap,我有: public enum Colour { RED, BLUE, BLACK; } 我有汽车等级: public class Car { private int id; private Colour colour; //other fields, getters and setters } 我有很多车在地图上。例如,我必须显示所有红色的汽车。所以我的问题是,什么是更好的解决方案。遍历地图中的所有汽车或创建地图,其中汽车列表将由颜色定义 第一个解决方案: publ

我有:

public enum Colour {
   RED, BLUE, BLACK;
}
我有汽车等级:

public class Car {
   private int id;
   private Colour colour;
   //other fields, getters and setters
}
我有很多车在地图上。例如,我必须显示所有红色的汽车。所以我的问题是,什么是更好的解决方案。遍历地图中的所有汽车或创建地图,其中汽车列表将由颜色定义

第一个解决方案:

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<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);
}
哪种解决方案看起来更专业

什么是更好的解决方案。遍历地图中的所有汽车或创建地图,其中汽车列表将由颜色定义

这取决于您搜索的频率和更新的频率

一般来说,如果您只有两件事,那么在本例中,您需要查找id和颜色并行贴图是最简单的解决方案

如果你看的是一对以上的夫妇,你需要更好地考虑频率,不断更新你很少使用的地图是不理想的。


根据您有多少对象和属性,您可能还需要考虑使用外部数据存储方法,例如SQL Server MySQL、MSSQL或任何能为您进行这些类型优化的任何东西。

这里没有对或错,这是一个更适合您的应用程序的问题。 第一种解决方案总是适用于所有的汽车。假设你有一个或多或少均匀分布的汽车颜色,这将意味着迭代三倍多的汽车

另一方面,第二种解决方案使您可以轻松访问所需颜色的汽车,但在保存第二张地图时会有一些内存开销

这一切归结为应用程序的需求。如果按颜色获取所有汽车是一种罕见的操作,或者如果内存需求是一个问题,那么第一种解决方案可能是首选。
如果获取特定颜色的所有汽车是应用程序中的常见操作,则第二个选项可能会更好。

通常,地图是更简单的解决方案,但它取决于钥匙数量、性能和内存限制。没有单一的正确答案。