029_自己实现一个HashMap
生活随笔
收集整理的這篇文章主要介紹了
029_自己实现一个HashMap
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import java.util.AbstractCollection;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;/*** 簡易HashMap* 數組 + 單向鏈表*/
public class MyHashMap {private Node[] table;private int size;private int initCapacity = 16;public MyHashMap() {table = new Node[initCapacity];}/*** hash表存放鍵值對個數* @return*/public int size() {return size;}/*** hash表是否為空* @return*/public boolean isEmpty() {return size == 0;}/*** 存放鍵值對* @param key* @param value* @return*/public boolean put(Object key, Object value) {int hash = Math.abs(key.hashCode()) % initCapacity;Node x = table[hash];if(x == null) {table[hash] = new Node(key, value, null);size++;return true;}else {Node n;for(n = x; n != null; n = n.next) {if(key.equals(n.key)) {n.value = value;return true;}x = n;}x.next = new Node(key, value, null);size++;return true;}}/*** 根據健獲取值* @param key* @return*/public Object get(Object key) {int hash = Math.abs(key.hashCode()) % initCapacity;for(Node n = table[hash]; n != null; n = n.next) {if(key.equals(n.key)) {return n.value;}}return null;}/*** Hash迭代類*/class MyHashIterator{Node next;int index;public MyHashIterator() {index = 0;next = null;if(table != null && size > 0) {do {}while(index < table.length && (next = table[index++]) == null);}}public final boolean hasNext() {return next != null;}public final Node nextNode() {Node e = next;if((next = e.next) == null) {do {}while(index < table.length && (next = table[index++]) == null); }return e;}}/*** 返回鍵的Set集合* @return*/public Set<Object> MykeySet() {return new MyKeySet();}/*** 鍵的Set類*/final class MyKeySet extends AbstractSet<Object>{public Iterator<Object> iterator() {return new MyKeyIterator();}public int size() {return size;}}/*** 鍵的迭代類*/final class MyKeyIterator extends MyHashIterator implements Iterator<Object>{public Object next() {return nextNode().key;}}/*** 值的集合* @return*/public Collection<Object> values() {return new MyValues();}/*** 值的集合類*/final class MyValues extends AbstractCollection<Object>{public Iterator<Object> iterator() {return new MyValueIterator();}public int size() {return size;}}/*** 值的迭代類*/final class MyValueIterator extends MyHashIterator implements Iterator<Object>{public Object next() {return nextNode().value;}}
}/*** 節點類*/
class Node{Object key;Object value;Node next;public Node(Object key, Object value, Node next) {this.key = key;this.value = value;this.next = next;}
}
?
總結
以上是生活随笔為你收集整理的029_自己实现一个HashMap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 028_自己实现一个LinkedList
- 下一篇: 030_自己实现一个HashSet