我正在创建一个链式哈希表,它使用我自己的LinkedList
类来处理collisons。这是我的问题出现的地方:我从一个LinkedLists数组开始,我的“哈希表”,最初设置为null。当我想添加一个单词时,如果所需的位置为null,我创建一个新的LinkedList
,将它放在该数组索引中。然后我创建一个新的LinkedListNode
并将新LinkedList的头部设置为新节点。
我的问题出现在这里:每当我将新LinkedList
的头部设置为我的新LinkedListNode
时,我之前创建的所有链接列表也会将其头部更改为新节点。
我的调试器显示我每次都在创建新的链接列表。我担心每个数组索引只是指向一个数组,但这显然不是问题。以下是所有相关代码
public class SetOfStrings {
private int arraySize;
private LinkedList[] mainArray;
private int totalCount;
//other methods here
public boolean add(String toAdd)
{
int hashToAdd = hash(toAdd);
int wasFound = contains(toAdd);
if(wasFound> 0)
{
return false; // means its already in the table
}
if(mainArray[hashToAdd]== null)
{
mainArray[hashToAdd] = new LinkedList();
ListNode newHead = new ListNode(toAdd);
mainArray[hashToAdd].setHead(newHead);
totalCount++;
return true;
}
ListNode currentHead = mainArray[hashToAdd].getHead();
ListNode newNode = new ListNode(toAdd);
newNode.setNext(currentHead);
mainArray[hashToAdd].setHead(newNode);
totalCount++;
return true;
}
public class ListNode {
private String thisString;
private ListNode next;
public ListNode(String setString)
{
thisString = setString;
next = null;
}
public class LinkedList {
private static ListNode head;
private static int count;
private static ListNode currentPosition;
// other methods here
public void setHead(ListNode newNode)
{ head = newNode;}
摘要:每当我将链接列表的头部设置为新节点时,它会将我所有链接列表的头部更改为指向同一个新节点
答案 0 :(得分:0)
你宣称你的头是static
。这意味着它在LinkedList
类的所有实例之间共享。删除static关键字应该可以解决您描述的问题。