简体   繁体   中英

Java HashSet wrong size

i am trying to implement hash set which will store Word objects but when i add more than one word object to it, it gives me always the size 1, i dont really know where the problem here is some part of my code:

public class HashWordSet implements WordSet{

private Node[] buckets = new Node[8];
private int size=0;

private class Node{
    Word value;
    Node next = null;
    Node prev = null;

    public Node (Word word){
        value = word;
    }
}
private int getBucketNumber(Word word){
    int hash = word.hashCode();
    if(hash<0){
        hash = -hash;
    }
    return hash%buckets.length;
}
  private void rehash(){ 
        Node[] temp = buckets; 
        buckets = new Node[2*temp.length]; 
        size = 0; 
        for (Node n : temp){ 

                while (n != null){ 
                    add(n.value); 
                    n = n.next; 
                } 

        } 
    } 
@Override
public Iterator iterator() {
    // TODO Auto-generated method stub
    return null;
}

@Override
public void add(Word word) {
    int pos = getBucketNumber(word);
    Node node = buckets[pos];
        while(node != null){
            if(node.value.equals(word))
                return;
            else
                node = node.next;
        }
        node = new Node(word);
        node.next = buckets[pos];
        buckets[pos] = node;
        size++;
        if(size == buckets.length)
            rehash();

}

@Override
public boolean contains(Word word) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public int size() {

    return size;
}
public String toString() {
    StringBuffer buf = new StringBuffer();
    for (int i=0;i<buckets.length;i++) {
        Node node = buckets[i];
        if (node == null) continue;
        buf.append("Bucket "+i+":");
        while (node != null) {
            buf.append(" "+node.value);
            node = node.next;
        }
        buf.append("\n");
    }
    return buf.toString();
}

}

Looks like you have a logic SNAFU here. You'll never get into your while loop. I don't have enough code here to determine if this is the only problem you have, but removing the if check will certainly help.

if (n == null){ // remove this
    while (n != null){ 
        add(n.value); 
        n = n.next; 
    }
} 

These lines from rehash() seem to be wrong:

for (Node n : temp){ 
            if (n == null){ //WRONG?!
                while (n != null){ 
                    add(n.value); 
                    n = n.next; 
                } 
            } 
        }

You work with nulls only...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM