有没有一种快速方法可以从任何一个条件列表中获取任何集合/地图中的所有元素?

时间:2015-05-26 02:28:12

标签: java indexing

我正在尝试为游戏构建搜索功能,以便用户可以看到一种类型的生物(物种,性别和状态效果,如健康和能量)。这种搜索将经常运行 - 它几乎是不断的,所以它需要尽可能地优化。

我可以使用地图,集合,数组等等。我愿意改变程序的其余部分,以使这个流程更流畅。我目前的策略是一堆HashMaps试图充当易于搜索的索引,而不是遍历牧场中的每一个生物。我花了两天时间阅读了太多的Map和List变体,但是它们似乎都没有让我有能力快速检查列表A中的每个项目以查看它是否包含列表B的成员。这样的索引是否可行Java,还是我应该放弃索引并迭代大对象并立即检查所有条件?

我很确定我完全错了,但我记得你们都喜欢看上下文的错误代码,所以这里是:

public static HashMap<Integer, Creature> creatures = new HashMap<Integer, Creature>();
public static HashMap<Integer, Species> species = new HashMap<Integer, Species>();
public static HashMap<Integer, Integer> gender = new HashMap<Integer, Integer>();
public static HashMap<Integer, Integer> health = new HashMap<Integer, Integer>();
public static HashMap<Integer, Integer> energy = new HashMap<Integer, Integer>();
public static void newCreature (Creature creature) {
    creatures.put(indexPos, creature);
    species.put(indexPos, creature.species);
    gender.put(indexPos, creature.gender);
    health.put(indexPos, creature.health);
    indexPos++;
}
public static void searchBy(EnumSet<Species> speciesInclude, boolean[] genderInclude) {
Integer[] index = creatures.keySet().toArray(new Integer[0]);
    if (!speciesInclude.isEmpty() && speciesInclude != EnumSet.allOf(Species.class)) {
        for (Integer i : index) {
            if (!speciesInclude.contains(species.get(i))){
                //remove element from array
            }
        }
    }
    if (genderInclude[0] != genderInclude[1]) {
        for (Integer i : index) {
            if (genderInclude[gender.get(i)]) {
                //remove element from array
            }
        }
    }
    //TODO check against health
    //TODO check against energy
    //TODO check against more things
}

为什么是的,我对Java完全陌生,并以PHP / SQL的方式思考。

1 个答案:

答案 0 :(得分:0)

没有人在回答表中发布此内容,因此我会将其从“未答复”中删除。列表:

不,Java不是数据库程序,因此没有类似JOIN的选项。迭代对象并检查它们的字段要快得多 - 这不是Java中的困难操作。

如果有一个经常被搜索的类别,可以将对象存储在单独的列表中,例如:Map&gt;,但简单的方法很好。谢谢Radiodef的帮助。