我有一个作业要在制作自己的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<>();
答案 0 :(得分:1)
我不确定SO是不是一个家庭作业帮助网站,但是Google进行了快速搜索 https://www.geeksforgeeks.org/hashing-set-2-separate-chaining/应该会给您带来一个想法。
可能您的基础实现将是ArrayList
中的List
。
插入:
将HashFunction
应用于键将为您提供ArrayList中的索引。
然后将密钥添加到存储在该索引处的列表的后面。
(需要弄清楚表已满意味着什么,以便您知道何时引发TableFullE
异常。)
删除:
像插入一样,将您的HashFunction
应用于键以找出我们要搜索的列表。最好使用List
的方法删除该项目。
搜索:
类似于删除,除了使用List
的{{1}}来回答搜索查询
很多可能的优化方法,但是请先尝试使其工作。