【发布时间】:2014-05-31 19:26:58
【问题描述】:
我正在创建一个链式哈希表,它使用我自己的LinkedListclass 来处理冲突。这是我的问题发生的地方:我从一个 LinkedLists 数组开始,我的“哈希表”最初设置为 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;}
摘要:每当我将链表的头设置为新节点时,它都会将所有链表的头更改为指向同一个新节点
【问题讨论】:
标签: java linked-list hashtable chaining