2个不同的链表的头部变为相同的值

时间:2014-04-16 18:41:37

标签: java linked-list hashtable chaining

我正在创建一个链式哈希表,它使用我自己的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;}

摘要:每当我将链接列表的头部设置为新节点时,它会将我所有链接列表的头部更改为指向同一个新节点

1 个答案:

答案 0 :(得分:0)

你宣称你的头是static。这意味着它在LinkedList类的所有实例之间共享。删除static关键字应该可以解决您描述的问题。