代码之家  ›  专栏  ›  技术社区  ›  stackoverflow101

如何更好地跟踪java中的索引(与Python相比)

  •  1
  • stackoverflow101  · 技术社区  · 10 年前

    在python中,您可以在列表中存储各种类型的不同项,但是必须通过它们各自的索引或列表方法来访问它们。

    使用python字典,您可以将键映射到项,这样就不必经常记住哪个索引包含哪个项。

    Python字典非常容易编写:

    mydic = {"item1":True, "item2":True, "item3":True}
    

    并且易于访问:

    if mydic["item1"]:
        localvar = mydic["item1"]
        mydic["item1"] = False
    

    同样,在Java中,我也尝试过做同样的事情,尽管我发现它要复杂得多:

    //this program assumes the creation of a class and method//
    HashMap<String, Boolean> mydic = new HashMap<String, Boolean>();
    mydic.put("item1", false); mydic.put("item2", false); mydic.put("item3", false);
    

    并且特别难以接近:

    boolean localvar = mydic.get("item1");
    if (localvar){
        mydic.remove("item1");
        mydic.put("item1", false);
    } else {
        localvar = null;
    }
    

    现在我不想比较语言,如果我这样做了,老实说,Java可能会赢。然而,创建一个项目和值的哈希图,然后将它们转换回布尔值,然后添加和删除以将值更改为true,这似乎会适得其反。

    现在,在布尔值的情况下,我知道有位集的选项,但如果项目有三种可能性而不是两种可能性,即开/中性/关,该怎么办?

    我还考虑了传递变量并与列表协调的可能性 (在python中看起来像这样)

    item1, item2, item3 = 0, 1, 2
    list = [True, True, True]
    def afunction(item1, item2, item3, itemlist):
        itemlist[item1] = False
    

    我真的不确定你能不能用这个语法 itemlist[item1]=假 在java中。然而,我主要关注的是记忆需求和做事方式 这对java来说最有意义。

    任何和所有的输入,

    2 回复  |  直到 10 年前
        1
  •  1
  •   peter.petrov    10 年前

    是的,在这方面,Java的语法比Python的语法更详细。
    这里没有太多真正的答案。事情就是这样。

    这是Java世界中非常好的/标准的编码方式。我不
    看看它有什么问题,或者任何可以简化得太多的地方。

    //this program assumes the creation of a class and method//
    HashMap<String, Boolean> mydic = new HashMap<String, Boolean>();
    mydic.put("item1", false); mydic.put("item2", false); mydic.put("item3", false);
    

    关于你的这封信。。。

    该程序假定创建了类和方法

    …嗯,每个Java程序至少有一个类和至少一个方法,所以这也很好。

        2
  •  0
  •   Boris the Spider    10 年前

    似乎可以在声明中使用菱形语法:

    Map<String, Boolean> mydic = new HashMap<>();
    mydic.put("item1", false);
    mydic.put("item2", false);
    mydic.put("item3", false);
    

    您的其他代码令人困惑,应该是:

    if (mydic.get("item1")) {
        mydic.put("item1", false);
    }
    

    不确定是什么 localvar 正在进行。