我正在研究搜索/组织算法。我使用多个enum
定义要组织的每条数据。例如:
enum CarType implements SearchFactor {
CAR, SUV, TRUCK, SEMI, LIMO;
@Override public SearchFactor getSearchFactor() { return this; }
}
和
enum PaintColor implements SearchFactor {
BLACK, WHITE, BLUE, GRAY, RED;
@Override public SearchFactor getSearchFactor() { return this; }
}
其中
SearchFactor
是:interface SearchFactor { }
样本数据类为:
class Vehicle {
CarType type = CarType.CAR;
PaintColor color = PaintColor.BLACK;
}
现在对于组织部分,我只是创建一个包含
SearchFactor
的数组,并添加我希望算法遵循的SearchFactor
枚举。通过逐步遍历Vehicle
的数组并将Vehicle
的type
和color
与包含的SearchFactor
的数组进行比较来完成此操作。例如:Vehicle[] getVehicleFromSearchFactor(SearchFactor[] factors) {
ArrayList<Vehicle> factoredVehicles = new ArrayList<Vehicle>();
for (Vehicle v : getListOfVehicles()) {
for (SearchFactor f : factors) {
if (v.type == f || v.color == f) {
factoredVehicles.add(v);
break;
}
}
}
return factoredVehicles;
}
这是好习惯吗?这太抽象了吗?
最佳答案
仅实现为getSearchFactor()
的return this
方法有什么意义?
您的getVehicleFromSearchFactor
方法中甚至没有使用它。
除此之外,为什么不呢?只要确保==
是比较搜索因子的正确方法即可。对于enum
,这很好,但对于其他对象,.equals(...)
可能更好……甚至.appliesTo(...)
之类。
(当然,以这种方式进行的搜索几乎不允许索引,并且具有O(车辆数量×搜索因子数量)时间复杂度。)