Java集合与数据结构-哈希表
2021/11/5 1:10:22
本文主要是介绍Java集合与数据结构-哈希表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
哈希桶解决哈希冲突:
import java.util.Arrays; import java.util.Objects; public class HashBucket<K,V> { static class Node<K,V> { public K key; public V val; public Node<K,V> next; public Node(K key, V val) { this.key = key; this.val = val; } } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; HashBucket<?, ?> that = (HashBucket<?, ?>) o; return usedSize == that.usedSize && Arrays.equals(array, that.array); } @Override public int hashCode() { int result = Objects.hash(usedSize); result = 31 * result + Arrays.hashCode(array); return result; } public Node[] array; public int usedSize; public HashBucket() { this.array = new Node[8]; } public void put(K key, V val) { Node<K,V> node = new Node<K,V>(key,val); int hash = key.hashCode(); int index = hash % array.length; Node<K,V> cur = array[index]; while (cur != null) { if (cur.key.equals(key)) { cur.val = val; return; } cur = cur.next; } node.next = array[index]; array[index] = node; this.usedSize++; if (loadFactor() >= 0.75) { resize(); } } //扩容 public void resize() { Node[] newArray = new Node[array.length * 2]; //遍历原来的数组,每个元素重新进行哈希 for (int i = 0; i < array.length; i++) { Node<K,V> cur = array[i]; while (cur != null) { int hash = cur.hashCode(); int index = hash % newArray.length; Node<K,V> curNext = cur.next; cur.next = newArray[index]; newArray[index] = cur; cur = curNext; } } } //求负载因子 public double loadFactor() { return usedSize * 1.0 / array.length; } public V get(K key) { int hash = key.hashCode(); int index = hash % array.length; Node<K,V> cur = array[index]; while (cur != null) { if (cur.key == key) { return cur.val; } cur = cur.next; } return null;//没找到 } public static void main(String[] args) { HashBucket<String,Integer> hashBucket = new HashBucket<>(); hashBucket.put("zm",1); hashBucket.put("zm2",2); System.out.println(hashBucket.get("zm2")); } }
这篇关于Java集合与数据结构-哈希表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门
- 2024-12-27JWT单点登录原理学习入门