Hashtable不会减少

时间:2018-03-22 05:05:12

标签: java hashtable

哈希表的值在maga_split数组的第二个循环中不会减1。它们与第一个循环中的相同。

Hashtable<String,Integer> notemap=new Hashtable<String,Integer>();
String[] note_split={give,one,grand,today};
String[] maga_split={give,me,one,grand,today,night};
for(int i=0;i<note_split.length;i++)
        {
            if(!notemap.contains(note_split[i]))
            {
                notemap.put(note_split[i],1);
            }
            else
            {
                notemap.put(note_split[i],notemap.get(note_split[i])+1);
            }
        }


        for(int i=0;i<maga_split.length;i++)
        {
            String s=maga_split[i];
            if(!notemap.contains(s))
            {
                notemap.put(s,1);
            }
            else
            {
                notemap.put(s,notemap.get(s)-1);
            }
        }

        for(Map.Entry s:notemap.entrySet())
        {
            System.out.println(s.getKey()+"="+s.getValue());        }

1 个答案:

答案 0 :(得分:0)

您的代码无效,因为您使用的是notemap.contains()。如果您阅读contains()的文档:

  

测试某个键是否映射到此哈希表中的指定值。此操作比containsKey方法更昂贵。请注意,此方法在功能上与containsValue相同(它是集合框架中Map接口的一部分)。

因此,您不测试密钥是否在表中,而是测试值。 使用地图时,最好尽可能使用Map界面Map<String, Integer> notemap = new HashMap<>();。这样您就可以确定要为map调用标准接口,并且可以根据需要切换map的实现,例如从HashMap到TreeMap。 然后你应该使用containsKey()方法