最简单的哈希-字符哈希
public class Solution
{
	public static void main(String[] args) 
	{
		int[] map=new int[128];
		String str="abcdefgaaxxy";
		for(int i=0;i<str.length();i++) {
			map[str.charAt(i)]++;
		}
		for(int i=0;i<128;i++) {
			if(map[i]>0) {
				System.out.println((char)i+" "+map[i]);
			}	
		}	
	}
}
哈希表排序整数
//哈希表排序整数
public class Solution
{
	public static void main(String[] args) 
	{
		int[] arr={6,5,1,2,7,7,128,321,13,7};
		int[] map=new int[1000];
		for(int i=0;i<arr.length;i++) {
			map[arr[i]]++;
		}
		for(int i=0;i<1000;i++) {
			for(int j=0;j<map[i];j++) {
				System.out.print(i+" ");
			}
		}
	}
}

问题引入:任意元素的映射
当遇到负数或非常大的整数、字符串、浮点数、数组、对象等等如何进行哈希(映射)
利用哈希函数,将关键字值(大整数、字符串、浮点数等)转换为整数再对表长取余,
从而关键字值被转换为哈希表的表长范围内的整数。

拉链法解决冲突,构造哈希表
将所有哈希函数结果相同的结点连接在同一个单链表中。
头插法

拉链法构造哈希表代码实现:
(哈希表的表长取为质数,冲突会比其他数字少)
//拉链法解决哈希冲突
class ListNode
{
	int val;
	ListNode next;
	ListNode(int val) {
		this.val=val;
	}
}
public class Solution
{
	public int hash_func(int key,int table_len) {
		return key%table_len;
	}
	public void insert(ListNode[] hash_table,ListNode node,int table_len) {
		int hash_key=hash_func(node.val,table_len);
		node.next=hash_table[hash_key];//使用头插法插入节点
		hash_table[hash_key]=node;
	}
	public boolean search(ListNode[] hash_table,int value,int table_len) {
		int hash_key=hash_func(val,table_len);
		ListNode head=hash_table[hash_key];
		while(head!=null) {
			if(head.val==value) {
				return true;
			}
			head=head.next;
		}
		return false;
	}
}