我目前正在进行在线Java课程,并且在分配时遇到了一些麻烦。赋值实际上是使用Arrays而不是其他Java数据结构或方法创建Hashmap。这是我的代码:
public class test {
static String[] array = new String[10];
class Cell<T> {
T first;
Cell<T> next;
Cell(T h, Cell<T> t) {
first = h;
next = t;
}
}
public static int hashFunction(String a) {
int sum = 1;
for (int i = 0; i < a.length(); i++) {
char b = a.charAt(i);
int value = (int) b;
sum *= value;
}
return sum % array.length;
}
public static void arraySetter(String a) {
int position = hashFunction(a);
if (array[position] == null) {
array[position] = a;
} else {
//Need a Linked List here for when there is already a item in the array at the same index.
}
}
public static void printArray() {
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
public static void main(String[] args) {
arraySetter("abc");
printArray();
}
}
我的代码基本上创建了一个列表列表。在Array中的每个位置,我现在需要创建一个列表,该列表仅在有两个具有相同hashFunction值的项时初始化。我还没有编写这个函数,但我现在的问题是我不知道如何在数组中的每个位置创建一个linkedList。有人可以帮帮我吗?
答案 0 :(得分:0)
这是您应存储数据的数据结构:
Cell [] array
使用String[]
之类的数组时,您将永远无法将String
的实例添加到该数组中。
当你得到一个新的hashCode时,你应该创建一个新的hashCode:
array [position] = new Cell&lt;&gt;(a,null);
由于它是来自linkedList的第一个元素,我们将其称为head
。
每次提供具有相同哈希码的值时,您需要从head
迭代到Cell
值为空的next
,然后使用新值进行定义细胞的实例。
这通常称为addLast
方法,你可以在这里找到一个很好的例子:
https://www.cs.cmu.edu/~adamchik/15-121/lectures/Linked%20Lists/linked%20lists.html
答案 1 :(得分:0)
如果你想要链表来避免冲突,那么你必须声明包含链表头部的数组。
Node<K,V>[] table;
示例代码未完全实现。
class Node<K,V> {
K key;
V value;
Node<K,V> next;
}
节点将包含当前键和值。如果要使用链表,则必须覆盖以及下一个值。如果要使用数组避免冲突,那么时间也使用包含键的节点和值键是检查相等性而没有下一个变量所必需的。