使用containsKey和get方法时遇到问题,也不确定如何迭代哈希表键和值,我想迭代并将值为true的键添加到解决方案列表中
第一个错误:方法containsKey(int)未定义类型hashTable
第二个错误:只能迭代数组或java.lang.Iterable
的实例第3次错误:对于hashTable类型
,方法get(int)未定义 package practice;
import java.util.*;
/*
You are given an integer array, where all numbers except for TWO numbers appear even number of times.
Q: Find out the two numbers which appear odd number of times.
*/
public class hashTable{
public static void main(String[] args){
int[] test = {2, 2, 5, 7, 4, 4};
List<Integer> solution = new ArrayList<Integer>();
Hashtable<Integer, Boolean> ht = new Hashtable<Integer, Boolean>();
Boolean check = true;
for (int item : test){
//error if (!containsKey(item)){
check = true;
} else{
check = false;
ht.put(item, check);
}
}
//error for (int item : ht){
//error if (get(item) == true){
solution.add(item);
}
}
System.out.println("the result is");
System.out.println(solution);
}
}
答案 0 :(得分:0)
问题似乎是您在不提供通用信息的情况下使用泛型类型。如果您放置@SuppressWarnings("unchecked")
(或者某些内容,没有要测试的IDE),则警告应该消失。话虽如此,我会反对这一点。
理想情况下,您应提供通用信息,并按@BackSlash建议:Hashtable<Integer, String> ht = new Hashtable<Integer, String>();
。这将为编译器提供所需的通用信息,并使您的集合类型安全,这是您通常想要的。
话虽如此,我建议采用不同的方法:
HashTable<Integer, Boolean>
。HashTable[number]
处的值应用not运算符。看到你的评论,你可以尝试这样的事情:
Hashtable<Integer, Boolean> table = new Hashtable<Integer, Boolean>();
int[] nums = ...
for(Integer number : nums)
{
if(table.containsKey(number))
{
table.put(number, !table.get(number));
}
else
{
table.put(number, false);
}
}