Java 如何与抽象枚举进行比较?
我正在研究一种搜索/组织算法。我使用多个Java 如何与抽象枚举进行比较?,java,enumeration,organization,Java,Enumeration,Organization,我正在研究一种搜索/组织算法。我使用多个enum来定义我想要组织的每一段数据。例如: enum CarType implements SearchFactor { CAR, SUV, TRUCK, SEMI, LIMO; @Override public SearchFactor getSearchFactor() { return this; } } Vehicle[] getVehicleFromSearchFactor(SearchFactor[] factors) {
enum
来定义我想要组织的每一段数据。例如:
enum CarType implements SearchFactor {
CAR, SUV, TRUCK, SEMI, LIMO;
@Override public SearchFactor getSearchFactor() { return this; }
}
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;
}
及
其中SearchFactor
为:
interface SearchFactor { }
一个示例数据类是:
class Vehicle {
CarType type = CarType.CAR;
PaintColor color = PaintColor.BLACK;
}
现在对于组织部分,我只需创建一个包含的SearchFactor
数组,并添加我希望算法遵循的SearchFactor
的枚举。这是通过逐步遍历车辆
s数组,并将车辆
s类型
和颜色
与包含的搜索因子
数组进行比较来实现的。例如:
enum CarType implements SearchFactor {
CAR, SUV, TRUCK, SEMI, LIMO;
@Override public SearchFactor getSearchFactor() { return this; }
}
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;
}
Vehicle[]getVehicleFromSearchFactor(SearchFactor[]factors){
ArrayList factoredVehicles=新ArrayList();
对于(车辆v:getListOfVehicles()){
对于(搜索因子f:因子){
如果(v.type==f | | v.color==f){
系数化车辆。添加(v);
打破
}
}
}
返回系数车辆;
}
这是好的做法吗?这是不是太抽象了?一个
getSearchFactor()
方法的要点是什么,它只作为返回这个
它甚至没有在getVehicleFromSearchFactor
方法中使用
除此之外,为什么不呢。只需确保==
是比较搜索因素的正确方法。对于enum
s这很好,但是对于其他对象。equals(…)
可能更好。。。甚至.appliesTo(…)
或诸如此类
(当然,您以这种方式进行的搜索不允许建立索引,并且具有O(车辆数量×搜索因子数量)的时间复杂性。)同意上面关于“getSearchFactor()”方法的回答
除了上面的答案,在我看来,通过您可能正在使用的任何持久化层或一些额外的索引技术(如Lucene/Solr),这可能会得到更好的处理。Ya在午餐时意识到了
getsearchFactor
的要点(缺少)。你说的“索引”是什么意思?谢谢你的链接,它很有帮助。最后一件事,如果你不介意的话。你对如何优化搜索到比O(N*SF)更好的东西有什么建议吗?这取决于你的用例。例如,您可以使用EnumMap
和EnumMap
,或通用HashMap
,在其中可以查找具有特定颜色/类型/搜索因子的所有车辆。好的,这是有意义的。谢谢你的指点。哈,我甚至不知道EnumMap
。再次感谢。