哈希表的值在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()); }
答案 0 :(得分:0)
您的代码无效,因为您使用的是notemap.contains()
。如果您阅读contains()
的文档:
测试某个键是否映射到此哈希表中的指定值。此操作比containsKey方法更昂贵。请注意,此方法在功能上与containsValue相同(它是集合框架中Map接口的一部分)。
因此,您不测试密钥是否在表中,而是测试值。
使用地图时,最好尽可能使用Map
界面:Map<String, Integer> notemap = new HashMap<>();
。这样您就可以确定要为map调用标准接口,并且可以根据需要切换map的实现,例如从HashMap到TreeMap。
然后你应该使用containsKey()
方法