Java手写Hashmap(HashMap的基本用法)
生活随笔
收集整理的這篇文章主要介紹了
Java手写Hashmap(HashMap的基本用法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:引言
HashMap是Map的實現類,其方法都可以繼承Map,不用手寫,本篇只是為了了解底層代碼和復習java基礎敲得碼
二:上碼
package cn.wyj.two;public class Demo5_手寫HashMap<K,V> {Node2 table[];//位桶數組int size;public Demo5_手寫HashMap(){table = new Node2[16];//數組長度一般設置成 2 的整數冪}//向容器當中存入數據public void put(K key,V value){Node2 newNode = new Node2(); newNode.hash = myHash(key.hashCode(), table.length);newNode.key = key;newNode.value = value;newNode.next = null;Node2 temp = table[newNode.hash];Node2 lastnode = null;//表示鏈表當中最后一個元素boolean keyRepeat = false;if( temp == null){//此處數組元素為空,則直接將新節點放進去table[newNode.hash] = newNode;size++;}else{//此處數組元素不為空,則遍歷對應的鏈表while(temp != null){//如果新節點的鍵值 等于 該該鏈表當中的數據 則覆蓋if(temp.key.equals(key)){temp.value = value;keyRepeat = true;break;}else{//key不重復lastnode = temp;temp = temp.next;}}if(!keyRepeat){lastnode.next = newNode;size++;}}}//根據鍵值 get 關鍵值public V get( K key ){int hash = myHash((key.hashCode()), table.length);V value = null;if(table[hash] != null){Node2 temp = table[hash];while(temp != null){if(temp.key.equals(key)){value = (V)temp.value;break;}else{temp = temp.next;}}}return value;}//數據的哈希地址public int myHash(int v,int length){return v&(length - 1);//只是位運算 效率高 其效果與取模運算一樣(v%(length - 1))}@Overridepublic String toString() {// TODO Auto-generated method stubStringBuilder sb = new StringBuilder();sb.append("{");//數組的 循環for(int i = 0; i < table.length; i++){Node2 temp = table[i];while( temp != null ){sb.append(myHash(temp.key.hashCode(), table.length) +" "+temp.value+',');temp = temp.next;}}sb.setCharAt(sb.length() - 1, '}'); return sb.toString();}public static void main(String[] args) {// TODO Auto-generated method stubDemo5_手寫HashMap<Integer,String> m = new Demo5_手寫HashMap<Integer,String>();m.put(10, "aa");m.put(20, "bb");m.put(30, "cc");m.put(20, "wyj");m.put(53, "10");m.put(69, "20");m.put(85, "30");// for(int i = 10; i < 100; i++) // { // System.out.println(i+"---"+m.myHash(i,16));//53 69 85 對16取余的結果都為 5; // }System.out.println(m.size);//6個就對了有一個重復了System.out.println(m.get(85));System.out.println(m);}}如有疑問歡迎留言! 加油陌生人!
總結
以上是生活随笔為你收集整理的Java手写Hashmap(HashMap的基本用法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年开学装机怎么配2022如何配电
- 下一篇: Java当中TreeMap用法