ChainingHash

public class ChainingHash<Key,Value>{
    private int N;
    private int M;
    private doublylinked<Key,Value>[] s;
    public ChainingHash(int M){
        this.M = M;
        s = new doublylinked [M];
        for(int i=0;i<M;i++){
            s[i] = new doublylinked();
        }
    }

    public int hash(Key key){
        return (key.hashCode() & 0x7fffffff)%M;
    }

    private void put(Key key,Value val){
        s[hash(key)].put(key, val);
    }

    private Value get(Key key){
        return s[hash(key)].get(key);
    } 

    private void delet(Key key){
        s[hash(key)].delet(key);
    }

    public void print(){
      for (int i = 0;i<M;i++){
              s[i].print();
              System.out.println("  ");
        }
    }

  public class doublylinked<Key,Value>{
      private Node first;
      public doublylinked(){
          first = null;
      }
      private class Node{
           Key key;
           Value val;
           Node next,last;
           public Node(Key key,Value val,Node next,Node last){
               this.key = key;this.val = val;this.next = next; this.last = last;
           }
          }
      public void put(Key key,Value val){
          for(Node x = first;x!= null;x= x.next){
              if(key.equals(x.key)){
                  x.val = val;
                  return;
              }
          }
          if(first == null){
              first = new Node(key,val,null,null);
              }
          else{
              first.last = new Node(key,val,first,null);
              first = first.last;
          }
          }

      public Value get(Key key){
          for(Node x = first;x!= null;x= x.next){
              if(key.equals(x.key)){
                  return x.val;
              }
                 }
        return null;  

                           }

      public void delet(Key key){
          for(Node x = first;x!= null;x= x.next){
              if(key.equals(x.key)){
                  x.last.next = x.next;
                  return;
              }
                 }
          return;
      }

      public void print(){
          int i = 0;
          if(first == null){
              System.out.println(" ");
              return;
          }
          for(Node x = first;x!= null;x= x.next){
              i++;
              System.out.println(x.key+" "+x.val );
              } 

      }

  }
  public static void main(String[] args) {
      ChainingHash<String, Integer> st = new  ChainingHash<String, Integer>(517);
      int N = args.length;
      for (int i = 0;i < N; i++) {
          String key = args[i];
          st.put(key, i);
      }

      // print keys
     st.print();
      } 

  }
  
时间: 2024-10-11 22:22:44

ChainingHash的相关文章