【发布时间】:2017-01-03 23:25:33
【问题描述】:
我有枚举:
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 有很多汽车。例如,我必须显示所有红色的汽车。所以这是我的问题,什么是更好的解决方案。遍历地图中的所有汽车或创建地图,其中汽车列表将由颜色定义?
第一个解决方案:
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);
}
哪种解决方案似乎更专业?
【问题讨论】:
-
通常地图是更直接的解决方案,但这取决于键的数量以及您的性能和内存限制。没有一个正确的答案。