成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java實現簡易HashMap功能詳解

瀏覽:143日期:2022-09-02 08:51:35

本文實例講述了Java實現簡易HashMap功能。分享給大家供大家參考,具體如下:

創建節點類

節點類含有的屬性:鍵值對(value,key)以及指向下一節點的next;這些屬性的get以及set方法

代碼如下:

/** * 節點類 * @author HP * */public class Node { private Object value; private Object key; private Node next;/** * 空節點 */ public Node() { }/** * 值為key value的節點 * @param data */ public Node(Object key,Object value) {this.key = key;this.value = value; } //接下來就是一些數據和節點的set,get public Object getValue() {return value; } public void setValue(Object value) {this.value = value; } public Object getKey() {return key; } public void setKey(String key) {this.key = key; } public Node getNext() {return next; } public void setNext(Node next) {this.next = next; }}實現MyHash

實現MyHash的基本操作:

實現哈希表的基本存取運算

1.創建一個固定大小數組 2.將數組中的每個元素作為頭節點 存儲鍵值對 3.存數:通過對key某種運算,計算出該數的哈希碼,將該哈希碼與數組做某種運算,得到該數在數組中的哪一個位置下的鏈表中 4.取數:計算該數的哈希碼,然后同樣找到該數在數組中的位置,然后從該頭節點依次向下進行比較得到該數,不存在則返回null

HashMap的源代碼以及函數使用方法及返回值:

HashMap hash = new HashMap();hash.keySet()hash.hashCode() :返回int類型hash.put(Object key, Object value)hash.get(Object key)返回key值對應的valuehash.remove(key) 返回對應的valuehash.remove(key, value) 返回boolean是否remove成功hash.size() :返回int類型的存儲的節點的個數hash.containsKey(Object key) :booleanhash.containsValue(value) :booleanhash.values() :返回value集合hash.clear();hash.replace(key, oldValue, newValue) ???hash.replace(key, value) 將key對應的oldvalue換為傳入的參數value,返回oldvaluehash.entrySet()hash.isEmpty()hash.equals(o):判斷兩個對象是否相等,看系統源代碼,可重寫

遍歷Iterator輸出的是所有節點對應的value的值

存儲的東西越來越大,那么刪除插入操作越來越復雜,那么需要rehash(需要一個條件判斷是否需要rehash)

本次示例沒有編寫rehash函數。

MyHash代碼,注釋還比較詳細,后邊還有測試代碼以及測試結果:

public class MyHash { //哈希數組的長度初始化為8 private int size = 8; private int number = 0;//存儲的節點的個數 //哈希數組 private ArrayList<LinkedList> array_head = new ArrayList<LinkedList>(size);//構造方法 public MyHash() {for(int i=0;i<size;i++) { LinkedList mylist = new LinkedList();//哈希數組中初始化存儲的為空鏈表頭 array_head.add(mylist);//初始化的時候就將空節點頭添加到數組中去} }/** * 根據 鍵值對 生成節點 * 將節點放入哈希表中 * @param key 鍵 * @param value 值 */ public void put(Object key,Object value) {if(number/size == 10) { rehash();}number++;Node new_node = new Node(key,value);//由傳入的參數生成新節點int code = hashcode(key.toString());//得到哈希碼int position = locate(code);//得到該哈希碼所對應的哈希數組中的位置//找到該位置對應的鏈表頭LinkedList list_head = (LinkedList) array_head.get(position);//將節點放入哈希表中list_head.add(new_node); }/** * */ private void rehash() { } /** * @param key * @param value * @return 返回鍵值對應得節點 */ public Object get(Object key) {int code = hashcode(key.toString());//得到哈希碼int position = locate(code);//得到該哈希碼所對應的哈希數組中的位置//找到該位置對應的鏈表LinkedList list_head = (LinkedList) array_head.get(position);//從頭遍歷鏈表 ,找到與鍵key對應的節點的value值進行輸出for(int i=0;i<list_head.size();i++) { //首先拿到頭節點 Node head = (Node) list_head.get(i); Node node = head; while(node!=null) {//如果 鍵 相等if(node.getKey().equals(key)) {// System.out.println('node.getValue() :'+node.getValue()); return node.getValue();}node = node.getNext(); }}return null;//否則返回空 }/** * 移除鍵為key的節點 * @param key * @return 返回刪除節點的key對應的value */ public Object remove(Object key) {number--;int code = hashcode(key.toString());//得到哈希碼int position = locate(code);//得到該哈希碼所對應的哈希數組中的位置//找到該位置對應的鏈表LinkedList list_head = (LinkedList) array_head.get(position);//從頭遍歷鏈表 ,找到與鍵key對應的節點的value值進行輸出for(int i=0;i<list_head.size();i++) { //首先拿到頭節點 Node head = (Node) list_head.get(i); Node node = head; while(node!=null) {//如果 鍵 相等if(node.getKey().equals(key)) { Object value = node.getValue(); list_head.remove(node); return value;}node = node.getNext(); }}return null;//否則返回空 }public Object replace(Object key,Object newvalue) {System.out.println('replace');int code = hashcode(key.toString());//得到哈希碼int position = locate(code);//得到該哈希碼所對應的哈希數組中的位置//找到該位置對應的鏈表LinkedList list_head = (LinkedList) array_head.get(position);//從頭遍歷鏈表 ,找到與鍵key對應的節點的value值進行輸出for(int i=0;i<list_head.size();i++) { //首先拿到頭節點 Node head = (Node) list_head.get(i); Node node = head; while(node!=null) {//如果 鍵 相等if(node.getKey().equals(key)) { Object oldvalue = node.getValue(); node.setValue(newvalue); return oldvalue;}node = node.getNext(); }}return null;//否則返回空 }/** * @param key * @return 哈希表中含有該key,返回true */ public boolean containsKey(Object key) {int code = hashcode(key.toString());//得到哈希碼int position = locate(code);//得到該哈希碼所對應的哈希數組中的位置//找到該位置對應的鏈表LinkedList list_head = (LinkedList) array_head.get(position);//從頭遍歷鏈表 ,找到與鍵key對應的節點的value值進行輸出for(int i=0;i<list_head.size();i++) { //首先拿到頭節點 Node head = (Node) list_head.get(i); Node node = head; while(node!=null) {//如果 鍵 相等if(node.getKey().equals(key)) { return true;}node = node.getNext(); }}return false;//否則返回空 }public Object containsValue(Object value) {//找到該位置對應的鏈表for(int k=0;k<size;k++) { LinkedList list_head = (LinkedList) array_head.get(k); //從頭遍歷鏈表 ,找到與鍵key對應的節點的value值進行輸出 for(int i=0;i<list_head.size();i++) {//首先拿到頭節點Node head = (Node) list_head.get(i);Node node = head;while(node!=null) {//如果 鍵 相等 if(node.getValue().equals(value)) {return true; } node = node.getNext();} }}return false;//否則返回空 }/** * 打印哈希表 */ public void show() {System.out.println('打印哈希表');for(int i=0;i<size;i++) { LinkedList list_head = array_head.get(i);//得到鏈表頭 System.out.println('鏈表 :'+(i+1)); for(int j=0;j<list_head.size();j++) {Node head = (Node) list_head.get(j);//取出每個節點Node node = head;while(node!=null) { //打印出每個節點得鍵值對 System.out.print('節點'+(j+1)+' :('+node.getKey()+':'+node.getValue()+')'+'-->'); node = node.getNext();} } System.out.println();}System.out.println(); }/** * * @return 返回存儲的節點的個數 */ public int size() {return number; }/** * 清除哈希表中的所有元素 */ public void clear() {for(int i=0;i<size;i++) {LinkedList list_head = array_head.get(i);//得到鏈表頭 list_head.clear(); }number = 0; }/** * 計算字符串的哈希碼 * ASCII碼相加 * @param s * @return */ public int hashcode(String s) {int k = 0;for(int i=0;i<s.length();i++) { k += s.charAt(i);}return k; }/** * 得到哈希碼對應在數組中的位置 * @param k * @return */ public int locate(int k) {int m = k%size;return m; }}測試代碼及結果

public class Test { public static void main(String[] args) {MyHash myhash = new MyHash();myhash.put('abc', 123);myhash.put('b', 2);myhash.put('c', 3);myhash.put('a', 1);myhash.put('d', 4);myhash.put('e', 5);myhash.put('f', 6);myhash.put('g', 7);myhash.put('h', 8);myhash.put('i', 9);myhash.put('j', 10);myhash.put('k', 11);myhash.put('l', 12);myhash.put('m', 13);System.out.println('myhash.get('g') :'+myhash.get('g'));System.out.println('myhash.size() :'+myhash.size());System.out.println('myhash.replace('m', 20) :'+myhash.replace('m', 20));System.out.println('myhash.containsValue(5) :'+myhash.containsValue(5));System.out.println('myhash.containsKey('g') :'+myhash.containsKey('g'));System.out.println('myhash.remove('j') :'+myhash.remove('j'));System.out.println('myhash.show()');myhash.show();myhash.clear();System.out.println('myhash.clear()');System.out.println('myhash.size() :'+myhash.size()); }}

Java實現簡易HashMap功能詳解

更多java相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美一区中文字幕| 中文字幕一区二区三区不卡| 欧美一级在线视频| 日韩精品一卡二卡三卡四卡无卡| 亚洲午夜精品一区二区| 久久久777精品电影网影网| 国产一区激情在线| 色婷婷久久久久swag精品| 亚洲综合偷拍欧美一区色| 欧美日韩成人一区二区三区| www成人在线观看| 国产黄色精品视频| 91精品一区二区三区在线观看| 久久激情五月婷婷| 欧美专区亚洲专区| 日本不卡一二三| 久久美女性网| 亚洲成人一区在线| 久久福利毛片| 天堂一区二区在线| 美女精品国产| 日本成人在线一区| 91极品美女在线| 麻豆成人久久精品二区三区红| 欧美丝袜自拍制服另类| 麻豆精品一区二区综合av| 色婷婷综合激情| 日韩av中文字幕一区二区| 久久精品日韩欧美| 婷婷久久综合九色国产成人| 久久久亚洲人| 青青草成人在线观看| 91国偷自产一区二区三区观看| 免费日本视频一区| 欧美日韩精品一区二区天天拍小说| 久久99精品久久久| 欧美日韩精品三区| 国产精品亚洲第一| 国产精品99久久久久久久vr| 欧美日韩在线观看一区二区三区| 中文欧美字幕免费| 精品电影一区| 亚洲伦理在线免费看| 亚洲一区二区三区欧美| 五月天激情综合网| 91福利在线免费观看| 久久国产精品露脸对白| 欧美一区二区三区在线看| 国产一区二区三区久久悠悠色av| 日韩欧美国产三级电影视频| 欧美一区高清| 悠悠色在线精品| 在线免费视频一区二区| 国产成人午夜精品影院观看视频| 久久久亚洲综合| 亚洲一二三区在线| 午夜在线成人av| 欧美久久久久久蜜桃| 972aa.com艺术欧美| 国产精品国产自产拍在线| 国产一区二区你懂的| 蜜臀av性久久久久蜜臀aⅴ流畅| 91精品国产全国免费观看| 成人黄色在线网站| 亚洲品质自拍视频网站| 色噜噜偷拍精品综合在线| 国产一区二区三区日韩| 精品噜噜噜噜久久久久久久久试看| 欧美婷婷在线| 午夜视频在线观看一区二区| 欧美精品乱码久久久久久| 91在线精品秘密一区二区| 亚洲女子a中天字幕| 亚洲综合激情| 国产精品自在在线| 亚洲欧洲精品一区二区精品久久久| 久久久久久久久久久久久久一区| 国产在线国偷精品产拍免费yy| 国产亚洲人成网站| 久久一区二区三区av| 不卡一区二区在线| 亚洲综合色丁香婷婷六月图片| 久久激情综合| 美腿丝袜一区二区三区| 久久久久久亚洲综合影院红桃 | 精品免费日韩av| 精品999日本| 久久er99精品| 国产精品久久久久久久久免费桃花 | 一区二区三区欧美| 欧美日韩和欧美的一区二区| aaa欧美色吧激情视频| 亚洲免费观看高清完整版在线观看| 久久亚洲欧洲| 99久久99精品久久久久久| 亚洲午夜在线观看视频在线| 91国偷自产一区二区使用方法| 93久久精品日日躁夜夜躁欧美| 亚瑟在线精品视频| 精品久久免费看| 国产精品亚洲一区| 丁香亚洲综合激情啪啪综合| 一区二区三区免费网站| 制服丝袜av成人在线看| 91亚洲精华国产精华精华液| 欧美大片一区| 亚州成人在线电影| 久久精品亚洲精品国产欧美 | 欧美亚洲免费在线| 粉嫩久久99精品久久久久久夜| 成人欧美一区二区三区在线播放| 欧美性色综合网| 欧美尤物一区| 激情图区综合网| 1000部国产精品成人观看| 欧美日韩国产成人在线91| 亚洲三级观看| 国内精品伊人久久久久av影院 | 亚洲欧美影音先锋| 欧美中文字幕一二三区视频| 国内精品福利| 国产精品一区2区| 亚洲午夜免费视频| 久久久综合视频| 欧美亚洲高清一区| 1024亚洲| 91网页版在线| 国产电影一区在线| 日本最新不卡在线| 亚洲人成在线播放网站岛国| 欧美精品一区二区三区四区| 日本道色综合久久| 在线日韩av永久免费观看| 国产成人av一区二区三区在线观看| 亚洲午夜久久久| 久久久久成人黄色影片| 欧美日韩国产一二三| 乱人伦精品视频在线观看| 国产精品国产一区二区| 国产黄色精品网站| 免费看黄色91| 一区二区三区av电影| 国产欧美精品一区二区色综合 | 欧美一级日韩不卡播放免费| 亚洲一区自拍| 色综合咪咪久久| 国产经典欧美精品| 亚洲麻豆国产自偷在线| 久久亚区不卡日本| 欧美一区二区三区小说| 色婷婷综合在线| 国产精品亚洲综合久久| 国产精品99一区二区| 成人av资源下载| 国产精品资源站在线| 老鸭窝一区二区久久精品| 亚洲精品国久久99热| 中文字幕制服丝袜一区二区三区 | 日韩激情在线观看| 亚洲人123区| 国产精品美女久久久久久久久久久| 日韩免费在线观看| 欧美精品1区2区3区| 欧美人妖巨大在线| 在线观看一区不卡| 午夜亚洲伦理| 日韩视频一区二区在线观看| 国产精品毛片久久久久久| 中文字幕一区二区三区在线观看| 一区二区三区免费在线观看| 国产成人精品影院| 欧美黄污视频| 欧美日韩不卡视频| 日韩在线一二三区| 永久91嫩草亚洲精品人人| 欧美一区二区三区视频在线观看| 亚洲高清久久久| 国产福利91精品| 欧美亚男人的天堂| 91麻豆国产香蕉久久精品| 欧美日韩视频一区二区| 亚洲精品国产a| 欧美日本韩国一区二区三区视频| 欧美精品久久天天躁| 国产精品久久久久一区| 国产高清在线观看免费不卡| 国户精品久久久久久久久久久不卡| 欧美亚洲专区| 欧美日本韩国一区| 午夜精品爽啪视频| 国产成人aaa| 久久久久久久久久久久久9999| 日韩欧美国产一区二区在线播放| 亚洲国产精品av| 蜜臀a∨国产成人精品| 91在线看国产| 精品av久久707| 不卡一区二区在线| 亚洲视频播放| 一区二区高清免费观看影视大全|