深圳龙华汽车网站建设,学做ppt的网站 免费下载,网站主页设计素材,网站关键字代码一#xff1a;引言
HashMap是Map的实现类#xff0c;其方法都可以继承Map,不用手写#xff0c;本篇只是为了了解底层代码和复习java基础敲得码
二#xff1a;上码
package cn.wyj.two;public class Demo5_手写HashMapK,V {Node2 table[];//位桶数组int size;pub…一引言
HashMap是Map的实现类其方法都可以继承Map,不用手写本篇只是为了了解底层代码和复习java基础敲得码
二上码
package cn.wyj.two;public class Demo5_手写HashMapK,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_手写HashMapInteger,String m new Demo5_手写HashMapInteger,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);}}
如有疑问欢迎留言 加油陌生人