System.out.print产生正确的结果但循环通过HashMap不是

时间:2016-03-24 12:14:35

标签: java string arraylist hashmap

我正在制作一个“普通”灯具发电机。因此,您输入名称/团队等,并创建一个需要播放的灯具表。

当输入“团队”时,他们会进入一个散列图,int的原因是每个团队都有分数,所以每个人都默认为0。

我正试图创造一种让每个人彼此相称的方法,我可以通过这种方法做到这一点。

public HashMap<String, String> genFixtures(HashMap<String, Integer> m_playerList){
    HashMap<String, String> r_fixtures = new HashMap<String, String>();

    ArrayList<String> m_fixtures = new ArrayList<String>();
    for (String key : m_playerList.keySet()){
        m_fixtures.add(key);
    }

    for (int i = 0; i < m_fixtures.size(); i++){
        for (int j = i + 1; j < m_fixtures.size(); j++){
            if (m_fixtures.get(i).equals(m_fixtures.get(j))){
                continue;
            } else {
                r_fixtures.put(m_fixtures.get(i) , m_fixtures.get(j));
            }

        }
    }
    return r_fixtures;
}

这会创建一个带有字符串键和值的新hashmap,因为我希望hashmap存储每个团队,key是团队,值是团队(我觉得这是一个非常糟糕的方法)。 然后我将原始String,Int Hashmap的所有键添加到ArrayList,执行一个操作,它们彼此匹配,完全按照计划工作,然后将它们添加到String String hashmap并返回到此方法中单独的课程:

 if(e.getSource()== m_generate){
    HashMap<String, String> m_gend = new HashMap<String,String>();
    m_gend =  m_fix.genFixtures(m_playerList);
    for(Map.Entry<String, String> entry : m_gend.entrySet()) {
        String m_key = entry.getKey();
        String m_value = entry.getValue();
        m_labelNames.setText(m_labelNames.getText() + m_key + " v " + m_value + "\n");
        }
    }

但是当我将hashmap的内容添加到JTextArea时,我只想说我添加团队“Ceri”,“Harry”,“Matthew”。 输出的是

马修诉哈利 Ceri v Harry

但没有Ceri诉马修。

1 个答案:

答案 0 :(得分:0)

  

当我将hashmap的内容添加到JTextArea时,我们可以说   我添加了团队&#34; Ceri&#34;,&#34; Harry&#34;,&#34; Matthew&#34;。输出的是

     

Matthew v Harry Ceri v Harry

因为Hashmap没有保留插入顺序。当您迭代Hashmap条目时,您将获得不同的不同值

您可以在文档

中找到它
  

此课程不保证地图的顺序;在   特别是,它不保证订单将保持不变   随着时间的推移

来自Oracle documention