⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hashtable.java

📁 java 实现常用数据结构(链表
💻 JAVA
字号:
/**
 *
 *
 *
 */
 
 package dreamer.util;
 
 public class HashTable<T>
 {
 	private final int INIT_SIZE = 2047;
 	private HashNode [] table;
 	private int size;
 	private int length;
 	
 	class HashNode<T>
 	{
 		private T data;
 		private String key;
 		private HashNode next;
 	}
 
 	public HashTable()
 	{
 		table = new HashNode[INIT_SIZE];
 		size = INIT_SIZE;
 		for(int i=0;i<size;i++)
 		{
 			table[i] = new HashNode();
 		} 		
 		length = 0;
 	}
 	
 	private int hash(String key)
 	{
 		char [] chars = key.toCharArray();
 		int addr = 0;
 		for(char ch:chars)
 		{
 			addr = addr<<3;
 			addr = addr+ch;
 		}
 		return addr%size;
 	}
 	
 	public boolean put(String key,T elem)
 	{
 		if(key==null)
 			return false;
 		int addr = hash(key);
 		HashNode head = table[addr];
 		HashNode node = new HashNode();
 		node.key = key;
 		node.data = elem;
 		if(head.next==null)
 		{
 			head.next = node;
 			length++;
 			return true;
 		}
 		HashNode cursor = head.next;
 		while(cursor!=null)
 		{
 			if(cursor.key.equals(key))
 				return false;
 			cursor = cursor.next;
 		}
 		cursor = node;
 		return true;
 	}
 	
 	public T remove(String key)
 	{
 		if(key==null)
 			return null;
 		int addr = hash(key);
 		HashNode previous = table[addr];
 		HashNode cursor = table[addr].next;
 		while(cursor!=null)
 		{
 			if(cursor.key.equals(key))
 			{
 				T elem = (T)cursor.data;
 				previous.next = cursor.next;
 				length--;
 				return elem;
 			}
 			previous = cursor;
 			cursor = cursor.next;
 		}	
 		return null;
 	}
 	
 	public T get(String key)
 	{
 		if(key==null)
 			return null;
 		int addr = hash(key);
 		HashNode cursor = table[addr].next;
 		while(cursor!=null)
 		{
 			if(cursor.key.equals(key))
 				return (T)cursor.data;
 			cursor = cursor.next;
 		}
 		return null;
 	}
 	
 	public boolean set(String key, T value)
 	{
 		if(key==null)
 			return false;
 		int addr = hash(key);
 		HashNode cursor = table[addr].next;
 		while(cursor!=null)
 		{
 			if(cursor.key.equals(key))
 			{
 				cursor.data = value;
 				return true;
 			}
 			cursor = cursor.next;
 		}
 		return false;
 	}
 	
 	public boolean contains(T elem)
 	{
 		for(int i=0;i<size;i++)
 		{
 			HashNode cursor = table[i].next;
 			while(cursor!=null)
 			{
 				if(cursor.data.equals(elem))
 					return true;
 				cursor = cursor.next;
 			}
 		}
 		return false;
 	}
 	
 	public boolean containskey(String key)
 	{
 		if(key==null)
 			return false;
 		int addr = hash(key);
 		HashNode cursor = table[addr].next;
 		while(cursor!=null)
 		{
 			if(cursor.key.equals(key))
 				return true;
 			cursor = cursor.next;
 		}
 		return false;
 	}
 
 	public Set keySet()
 	{
 		if(length==0)
 			return null;
 		Set keys = new ArraySet<String>();
 		for(int i=0;i<size;i++)
 		{
 			HashNode cursor = table[i].next;
 			while(cursor!=null)
 			{
 				keys.add(cursor.key);
 				cursor = cursor.next;
 			}
 		}
 		return keys;
 	}
 	
 	public Object [] toArray()
 	{
 		if(length==0)
 			return null;
 		Object [] elements = new Object[length];
 		int i = -1;
 		for(int j=0;j<size;j++)
 		{
 			HashNode cursor = table[j].next;
 			while(cursor!=null)
 			{
 				i++;
 				elements[i] = cursor.data; 				
 				cursor = cursor.next;
 			}
 			continue;
 		}
 		return elements;
 	}
 	
 	public boolean isEmpty()
 	{
 		if(length==0)
 			return true;
 		return false;
 	}
 	
 	public int size()
 	{
 		return length;
 	}
 
    public void clear()
    {
    	table = new HashNode[INIT_SIZE];
 		size = INIT_SIZE;
 		for(int i=0;i<size;i++)
 		{
 			table[i] = new HashNode();
 		} 		
 		length = 0;
    }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -