Java Hashtable for String Key

Açıklama

  • Hash Table ( Karım Tablosu ) algoritması, eklenecek olan veriden bir tam sayı elde ederek ve o elde edilen sayı ile dizide hangi indise yerleştirileceğini belirler.
  • Eğer elde edilen indis numarası, önceden eklenmiş olan veri ile  aynı ise bulunan indis değerdeki değerin sağına bağlantı yaparak ekleme yapar. Bunu linkedlist gibi düşünebilirsiniz.

 

Görsel olarak gösterim

hash-table

 

 

Kod

package hashtable;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {

  public static void main(String args[]) {

		try {
			
	            Scanner s = new Scanner(new File("words.txt")); // dışardan kelime listesini hashtable ekleme
			
		    HashTable hashtable = new HashTable(256);
			
			while(s.hasNextLine()) {
				//System.out.println(s.nextLine());
				hashtable.add(new Node(s.nextLine()));
			}

                    System.out.println(hashtable.find("KodSözlük")); // hashtable'da veri arama işlemi
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

  }

}



class HashTable {

  final int ALPH = 256;

  Node table[];

  private int SIZE;

  public HashTable(int SIZE) {

    table = new Node[SIZE];

    this.SIZE=SIZE;

  }

 
  int hash(String str){

    int h=0;

    for(int i=0;i<str.length();i++){

      h=((h*ALPH)+str.charAt(i))%SIZE;

    }

    return h;

  }

  void yazdir() {

    for(int i=0;i<SIZE;i++) {

      Node tmp = table[i];

      while(tmp!=null) {

        System.out.print(i+". "+tmp.icerik+" ");

        tmp=tmp.next;

      }

      System.out.println("");

    }
  }

  boolean delete(String str) {

    if(find(str)) { 

      int h = hash(str);

      Node tmp = table[h];

      Node previous = table[h];

    if(tmp.next == null){

      table[h]=null;

    }else{
      while(tmp!=null) {

        if(tmp.icerik.equals(str))

          break;

        previous=tmp;

        tmp=tmp.next;

      }


      System.out.println(previous.icerik);
      System.out.println(tmp.icerik+"\n");


      if(table[h]==tmp)
        table[h]=tmp.next;
      else
        previous.next=tmp.next;

    }

    //  previous.ileri=tmp.ileri;

      return true;

    } 

    return false;

  }

  boolean find(String str) {

    int h = hash(str);

    Node tmp = table[h];

    while(tmp!=null) {

      if(tmp.icerik.equals(str)) {

        return true;

      }

      tmp = tmp.next;

    }

    return false;

  }

  void add(Node yeni) {

  //  int h= yeni.icerik%N;

    if(!find(yeni.icerik)){

      int h = hash(yeni.icerik);

      //    System.out.print(h);

          if(table[h] == null) {

            table[h] = yeni;

          }else {

            Node tmp = table[h];

            while(tmp.next!=null) {

              tmp=tmp.next;

            }

            tmp.next=yeni;

          }

    }

  }

}

class Node{

  String icerik;

  Node next;

  Node(String icerik){

    this.icerik=icerik;

  }

}

Yorumlar

Bu gönderi için yorum yapılmadı.