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或任何能为您进行这些类型优化的任何东西。
这里没有对或错,这是一个更适合您的应用程序的问题。 第一种解决方案总是适用于所有的汽车。假设你有一个或多或少均匀分布的汽车颜色,这将意味着迭代三倍多的汽车
另一方面,第二种解决方案使您可以轻松访问所需颜色的汽车,但在保存第二张地图时会有一些内存开销 这一切归结为应用程序的需求。如果按颜色获取所有汽车是一种罕见的操作,或者如果内存需求是一个问题,那么第一种解决方案可能是首选。如果获取特定颜色的所有汽车是应用程序中的常见操作,则第二个选项可能会更好。通常,地图是更简单的解决方案,但它取决于钥匙数量、性能和内存限制。没有单一的正确答案。