哈希表-鏈地址法

鏈地址法其實就是將實現哈希表的底層數組的類型變成鏈表,每次插入數據插入到鏈表中即可

這裏寫圖片描述

package map;

public class Node
{
    private int data ;
    public Node next ;

    public Node ( int data )
    {
        this.data = data ;
    }

    public int getData ()
    {
        return data;
    }

    public void setData ( int data )
    {
        this.data = data;
    }


}
---------------
package map;

public class LinkList
{
    private Node first ;//首節點
    private Node current ;//用來記錄當前節點
    private Node newNode ;

    //插入數據
    public void insert ( int i )
    {
        newNode = new Node ( i ) ;

        if ( first == null )
        {
            first = newNode ;
            return ;
        }

        newNode.next = first ;
        first = newNode ;

    }

    public void delete ( int value )
    {
        current = first ;
        Node parent = first ;
        while ( current != null )
        {
            if ( current.getData () == value )
            {
                parent.next = current.next ;
                return ;
            }
            parent = current ;
            current = current.next ;
        }
    }

    public Node find ( int value )
    {
        current  = first ;

        while ( current != null && current.getData () != value )
        {
            current = current.next ;
        }

        //跳出循環說明找到或者爲空
        if ( current == null )
        {
            System.out.println ( "null" );
            return null ;
        }
        else
        {
            return current ;
        }
    }

    public void display ()
    {
        current = first ;
        while ( current != null )
        {
            System.out.print ( current.getData () + " " );
            current = current.next ;
        }
        System.out.println (  );
    }
}
-----------------------
package map;

public class LinkHash
{
    private LinkList [] arr ;
    private int size  ;
    private Node newNode ;

    public LinkHash ( int size )
    {
        this.size = size ;
        arr = new LinkList [size] ;
    }

    public int Hash ( int data )
    {
        return data % arr.length ;
    }

    //插入
    public void insert ( int data )
    {
        int index = Hash ( data ) ;//計算索引下標

        //如果爲空,就new一個list進去
        if ( arr [index] == null )
        {

            LinkList l = new LinkList () ;
            l.insert ( data );
            arr [index] = l ;
        }
        else
        {//不爲空直接入
            arr [index].insert ( data );
        }
    }

    public Node find ( int data )
    {
        int index = Hash ( data ) ;

        if ( arr [index] == null )
        {
            return null ;
        }
        else 
        {
            Node n = arr [index].find ( data ) ;

            if ( n == null )
            {
                return null ;
            }
            else
            {
                return n ;
            }
        }

    }

    public void delete ( int data )
    {
        int index = Hash ( data ) ;

        arr [index].delete ( data );
    }

    public void display ()
    {
        for ( int i = 0 ; i < arr.length ; ++ i )
        {
            if ( arr [i] != null )
            arr [i].display ();
            else
                System.out.println ();
        }
        System.out.println ( "-------------" );
    }

}
發佈了43 篇原創文章 · 獲贊 25 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章