Java中Map类的基本实现
2017-12-20 20:53
148 查看
Map接口:key-value对,底层实现——使用数组+链表存储键值对
主要实现类:HashMap(线程不安全,效率高)、HashTable(线程安全)
主要实现类:HashMap(线程不安全,效率高)、HashTable(线程安全)
class Entry<K,V>{ K key; V value; public Entry(K key, V value){ super(); this.key=key; this.value=value; } }
/** * 自定义Map的升级版 * 1、使用哈希码,确定新的键值对应该放在数组中的哪个位置(单纯的使用哈希码确定位置,会存在冲突) * 2、所以,使用“数组+链表”实现,没有冲突地存储键值对(每一个数组元素都是一个链表对象,该链表中的对象具有相同的首次计算的地址) */ public class myMap02<K,V> { private static final int MAXSIZE=999; LinkedList[] arr = new LinkedList[MAXSIZE]; private int size; public int size(){ return size; } public void put(K key, V value){ Entry<K, V> e = new Entry(key,value); //使用hashCode计算新的键值对要放在数组的哪个位置 int a = key.hashCode()%MAXSIZE; if(arr[a]==null){ LinkedList list = new LinkedList(); list.add(e); arr[a]=list; }else{ //如果已经存在该key,则覆盖原来的value LinkedList list = arr[a]; for(int i=0; i<list.size();i++){ Entry<K,V> ele= (Entry) list.get(i); if(ele.key.equals(key)){ ele.value=value; return ; } } list.add(e); } } public V get(K key){ int a = key.hashCode()%MAXSIZE; if(arr[a]!=null){ LinkedList list = arr[a]; for(int i=0; i<list.size();i++){ Entry<K,V> e= (Entry) list.get(i); if(e.key.equals(key)){ return e.value; } } } return null; } public static void main(String[] args) { myMap02 m = new myMap02(); m.put("01",100); m.put("02",99); m.put("03",98); m.put("04",97); System.out.println(m.get("04")); } }
相关文章推荐
- JAVA实现数据库基本操作指南
- 用java数组实现基本链表和可自扩充的链表
- C++实现类似JAVA反射的基本功能
- JAVA 文件上传下载笔记之使用基本IO流实现上传
- java swing 基本实现QQ截屏功能,很简陋但有学习价值
- java速度入四.文件的基本操作及猜数字游戏的实现
- [基本算法]Java——编写一个线段类,实现基本数学算法
- JAVA用List实现Map的基本功能
- JAVA反射实现基本的copyProperty,getProperty,isEmpty方法
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
- 基本矩阵运算的Java实现
- 基本矩阵运算的Java实现
- Java实现SNMP(简单网络管理协议)基本使用
- 《算法导论的Java实现》 11 基本数据结构
- JAVAScript js 模拟JAVA map类 实现put get 等JAVA map类方法
- java实现基本的单例模式
- JAVAScript js 模拟JAVA map类 实现put get 等JAVA map类方法
- 【Java Socket】【Flex Socket】【Java 多线程】实现基本聊天功能demo
- java的网络通信最基本实现
- Java实现cache的基本机制