Java 为什么我的字符串[]数组组合没有作为键添加到HashMap中?

Java 为什么我的字符串[]数组组合没有作为键添加到HashMap中?,java,hashmap,key,combinations,Java,Hashmap,Key,Combinations,我正在尝试制作一个由某个字母表的各种组合组成的HashMap。hashmap:新建hashmap() String[]数组是键,但它似乎没有保存。这可能是我检查的方式? 由于所有值均为0,因此我使用以下方法进行了检查: int count = Collections.frequency(consData.values(), 0); for(String s: al){ nc = s + "|"; for(String k:al){

我正在尝试制作一个由某个字母表的各种组合组成的
HashMap
。hashmap:
新建hashmap()

String[]
数组是键,但它似乎没有保存。这可能是我检查的方式? 由于所有值均为0,因此我使用以下方法进行了检查:

int count = Collections.frequency(consData.values(), 0);

 for(String s: al){
         nc = s + "|";
            for(String k:al){
                nc= nc + k + "|";
                for(String l : al){
                    nc = nc + l + "|";
                    for(String m : al){
                        nc = nc + m + "|";
                        for(String n : al){
                            nc = nc + n + "|";
                            for(String o : al){
                                nc = nc + o;
                                consData.put(nc, 0);
                            //nc= ""; If I don't add this, OutofMemory Error
                            }
                        }
                    }
                }
         }      
     } 

似乎您正在尝试使用所有键预先填充HashMap。我不知道目标用例。但通常情况下,按需在HashMap中填充键是有意义的。这是一种很好的做法,而且效率更高

无论如何,解决你眼前的问题。您面临的问题是,在这里,您要将相同的键对象(或者在本例中是数组对象)一次又一次地添加到映射中,并同时从外部更新数组

因此,取代:

consData.put(nc, 0);
与:

应该能解决你的问题


这也意味着您需要将地图更改为地图。如果每个值都是字母,那么它们应该是
char
值,而不是
String
,并且它们应该组合起来形成一个6个字母的
字符串
,这对于键来说是比数组更好的选择。数组不能作为键使用,因为它们不能实现
equals()
hashCode()
,所以每个数组实例都是一个新的键。@Andreas我应该更改consData.put(nc,0)?不管对字符串做了什么更改,我仍然无法将其保存到HashMap中。请学习。您尚未提供
nc
consData
al
的定义。
al
中有多少个值,它们都是一个字母吗?--不管怎样,你认为这个新代码的关键是什么?注释掉
put()。或者,老天禁止,试着调试你的代码。
consData.put(String.join("", nc), 0);