硬件:创建自己的哈希表-不确定如何在其中使用链表

时间:2019-02-01 00:18:44

标签: java hashtable

我有一个作业要在制作自己的HashTables的地方进行。今天我去了一家人工智能公司,他说我的代码“在正确的轨道上,但我应该使用链表”,这让我对他的意思有些困惑。

请给我提示我所缺少的内容。

class HashSeparateChaining extends HashTable {

    int size = 0;
    HashFunction hf;
    List<Integer> arrayList = new ArrayList<>();

    public HashSeparateChaining(int size, HashFunction hf) {

        size = this.size;
        hf = this.hf;

        for(int i = 0; i < size; i++) {
            arrayList.add(null);
        }

    }

    @Override
    void insert(int key) throws TableFullE {
        arrayList.set(key, key);

    }

    @Override
    void delete(int key) {
        arrayList.set(key, null);
    }

    @Override
    boolean search(int key) {
        for(int z = 0; z < arrayList.size(); z++)
            if(arrayList.get(z) == key)
                return true;

        return false;
    }

}

那么AI意味着我应该使用这样的东西吗?

List<LinkedList<Integer, String>> list = new LinkedList<>();

1 个答案:

答案 0 :(得分:1)

我不确定SO是不是一个家庭作业帮助网站,但是Google进行了快速搜索  https://www.geeksforgeeks.org/hashing-set-2-separate-chaining/应该会给您带来一个想法。

可能您的基础实现将是ArrayList中的List

插入: 将HashFunction应用于键将为您提供ArrayList中的索引。 然后将密钥添加到存储在该索引处的列表的后面。 (需要弄清楚表已满意味着什么,以便您知道何时引发TableFullE异常。)

删除: 像插入一样,将您的HashFunction应用于键以找出我们要搜索的列表。最好使用List的方法删除该项目。

搜索: 类似于删除,除了使用List的{​​{1}}来回答搜索查询

很多可能的优化方法,但是请先尝试使其工作。