鏈地址法其實就是將實現哈希表的底層數組的類型變成鏈表,每次插入數據插入到鏈表中即可
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 ( "-------------" );
}
}