如何使哈希表在插入空键时引发异常(java)?

ltqd579y  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(353)

对于评估,我需要创建一个哈希表,我已经完成了。但是,我需要在插入null键时抛出一个异常。
我要通过的测试是:

@Test(expected = IllegalArgumentException.class)
public void testNullKey() {
    Hashtable<Boolean> h = new Hashtable<>(10);
    h.put(null, true);
}

这给了我一个错误:

java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.lang.NullPointerException>

Caused by: java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "key" is null
    at Hashtable.hash(Hashtable.java:270)
    at Hashtable.put(Hashtable.java:84)
    at test.TestHT.testNullKey(TestHT.java:52)

hashtable.hash(hashtable。java:270)是:

private int hash(String key)
{
    int hashVal = key.hashCode();
    hashVal %= max;

    if (hashVal < 0)

        hashVal += max;

    return hashVal;
}

和hashtable.put(hashtable。java:84)是:

public void put(String key, V value)
{
    int h = 0;

    if (getLoadFactor() > maxLoad)
        resize();

    h = probeType == PROBE_TYPE.LINEAR_PROBE ? hash(key) : doubleHash(key);

    if (get(key) != null)
    {
        arr[h] = new Pair(key, value);
    } else
    {
        arr[findEmpty(h, 0, key)] = new Pair(key, value);
        itemCount++;
    }
}

我完全不知道在插入空键时抛出异常。我试着添加 throw new IllegalArgumentException(); 还有其他类似的尝试 put ,但我不能让它工作。
有人有什么想法或建议吗?

cnwbcb6i

cnwbcb6i1#

好 啊。所以这个 Hashtable 类是您的代码,而不是 java.util.Hashtable . (你骗了我一分钟……)
解决办法很简单。显式测试 key 看看是不是 null 并抛出所需的异常:

if (key == null) {
    throw new IllegalArgumentException("key is null");
}

我会让你去找出最好的地方把代码放在哪里。
另一种方法是 NullPointerException 预期的异常。。。但我对你的问题的理解是,这个测试用例正在检查一个需求是否得到满足。

相关问题