迭代哈希表并使用get和containsKey方法

时间:2014-12-22 08:41:18

标签: java hashtable chaining

使用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);
            }

         }

1 个答案:

答案 0 :(得分:0)

问题似乎是您在不提供通用信息的情况下使用泛型类型。如果您放置@SuppressWarnings("unchecked")(或者某些内容,没有要测试的IDE),则警告应该消失。话虽如此,我会反对这一点。

理想情况下,您应提供通用信息,并按@BackSlash建议:Hashtable<Integer, String> ht = new Hashtable<Integer, String>();。这将为编译器提供所需的通用信息,并使您的集合类型安全,这是您通常想要的。

话虽如此,我建议采用不同的方法:

  1. 迭代你的阵列。
  2. 创建哈希表:HashTable<Integer, Boolean>
  3. 如果您正在迭代的数字存在于哈希表中,则对HashTable[number]处的值应用not运算符。
  4. 如果没有,请添加新条目并将布尔值设置为false。
  5. 看到你的评论,你可以尝试这样的事情:

    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);
        }
    }