最简单的哈希-字符哈希
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;
}
}

京公网安备 11010502036488号