1.HasMap 自定义基础版

package com.test.collection;

/**
* 自定义实现Map功能
* map :存放键值对,根据键对象找对应的值对象
* @author chenx
*
*/
public class MyMap001 {
Entry[] arr=new Entry[999];
int size; public void put(Object key,Object value){
Entry e=new Entry(key,value); //解决键重复的处理,后面的直接覆盖
for(int i=0;i<size;i++){
if(arr[i].key.equals(key)){
arr[i].value =value;
return;
}
}
arr[size++]=e;
} public Object get(Object key){
for(int i=0;i<size;i++){
if(arr[i].key.equals(key)){
return arr[i].value;
}
}
return null;
}
public boolean containsKey(Object key){
for(int i=0;i<size;i++){
if(arr[i].key.equals(key)){
return true;
}
}
return false;
}
public int size(){
return size;
}
public static void main(String[] args) {
MyMap001 map=new MyMap001();
map.put("a", "张三");
map.put("a", "李四");
map.put("c", "王五");
//map.remove(2);
System.out.println(map.get("a"));
System.out.println(map.size()); } } class Entry{
Object key;
Object value;
public Entry(Object key, Object value) {
super();
this.key = key;
this.value = value;
}
}

2.HasMap 自定义升级版

package com.test.collection;

import java.util.LinkedList;

/**
* 自定义实现Map功能(升级版)
* map :存放键值对,根据键对象找对应的值对象
*
* 1.提升查询效率,避免MyMap002中的循环遍历: 数组+链表
*
* hashMap:底层实现(数组+链表),链表中放对象,对象中存key,value
*
* @author chenx
*
*/
public class MyMap002 {
LinkedList[] arr=new LinkedList[999];
int size; public void put(Object key,Object value){
Entry2 e=new Entry2(key,value);
int has=key.hashCode();
has = has<0?-has:has;
int a =has%arr.length;
if(arr[a] ==null){
LinkedList list =new LinkedList();
arr[a] =list;
list.add(e);
}else{ LinkedList list=arr[a];
for(int i=0;i<list.size();i++){
Entry2 e1=(Entry2)list.get(i);
if(e1.key.equals(key)){
e1.value = value;//重复的进行覆盖
return;
}
}
arr[a].add(e);
}
} public Object get(Object key){
int has=key.hashCode();
has = has<0?-has:has;
int a =has%arr.length;
if(arr[a] !=null){
LinkedList list=arr[a];
for(int i=0;i<list.size();i++){
Entry2 e=(Entry2)list.get(i);
if(e.key.equals(key)){
return e.value;
}
}
}
return null;
} public static void main(String[] args) {
MyMap002 map=new MyMap002();
map.put("a", "张三");
map.put("a", "李四");
map.put("c", "王五");
//map.remove(2);
System.out.println(map.get("a"));
//System.out.println(map.size()); } } class Entry2{
Object key;
Object value;
public Entry2(Object key, Object value) {
super();
this.key = key;
this.value = value;
}
}

Java集合篇五:HashMap的更多相关文章

  1. Java集合框架:HashMap

    转载: Java集合框架:HashMap Java集合框架概述   Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...

  2. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. Java 集合系列 11 hashmap 和 hashtable 的区别

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. java集合系列之HashMap源码

    java集合系列之HashMap源码 HashMap的源码可真不好消化!!! 首先简单介绍一下HashMap集合的特点.HashMap存放键值对,键值对封装在Node(代码如下,比较简单,不再介绍)节 ...

  5. Java集合框架之HashMap浅析

    Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...

  6. (转)Java集合框架:HashMap

    来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...

  7. 【由浅入深理解java集合】(五)——集合 Map

    前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap.关于Map的一些通用介绍,可以参考第一篇文章.由于Map与Lis ...

  8. Java集合系列之HashMap

    概要 第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射.HashMap 继承于AbstractMap,实现了Map.Clo ...

  9. Java 集合框架:HashMap

    原文出处:Java8 系列之重新认识 HashMap 摘要 HashMap 是 Java 程序员使用频率最高的用于映射 (键值对) 处理的数据类型.随着 JDK(Java Developmet Kit ...

随机推荐

  1. 最短路径 Dijkstra算法 AND Floyd算法

    无权单源最短路:直接广搜 void Unweighted ( vertex s) { queue <int> Q; Q.push( S ); while( !Q.empty() ) { V ...

  2. 用python脚本 从xls文件中读取数据

    导入 xlrd 第三方模块 import xlrd data = xlrd.open_workbook('test.xlsx') # 打开xls文件 table = data.sheets()[0] ...

  3. Domoticz 中添加彩云天气

    前言 用过一段时间的彩云天气 APP,最吸引我的地方是精确到局部区域的天气预测,虽然准确度并不算高,但是对于预测下雨还是不错的选择.在 Domoticz 中添加彩云天气的数据,利用的是彩云天气提供的 ...

  4. 1144G Two Merged Sequences ( 贪心+构造)

    题目:https://codeforces.com/problemset/problem/1144/G 题意: 将一个序列分成两个序列,两个序列中元素的相对顺序保持和原序列不变,使得分出的两个序列一个 ...

  5. HDU 5938 Kingdom of Obsession(数论 + 二分图匹配)

    题意: 给定S,N,把S+1,S+2,...S+N这N个数填到1,2,...,N里,要求X只能填到X的因子的位置.(即X%Y=0,那么X才能放在Y位置) 问是否能够放满. 分析:经过小队的分析得出的结 ...

  6. nginx(二)-反向代理

    什么是反向代理? 我们看图说话,我们用电脑访问谷歌,由于防火墙的存在,我们并不能直接访问.需要借助VPN来实现.这就是一个简单的正向代理的例子.这里你能够发现,正向代理“代理”的是客户端,而且客户端是 ...

  7. ESP8266使用详解

    [From] http://www.cnblogs.com/yangfengwu/p/5205570.html 用的这款 各引脚功能:来至厂家提供的资料 GPIO0 默认是工作模式(不接线).如果接了 ...

  8. iptables 深入分析

    四表五链四表:filter , nat, manager, raw五链: 五个HOOK点的链接,pre_rout, foward, post_rout, in ,out 问题:内核如何匹配,内核使能 ...

  9. 企业的VI设计需要包含哪些元素

    VI设计,即视觉识别系统,企业VI设计是企业品牌建设的重中之重.最近很多人都在问,一套完整的企业VI设计都包括哪些内容?现在我们站在一个高级设计师的角度,来简单谈一谈VI设计包括哪些内容.文中指出,一 ...

  10. 日志logback

    http://tengj.top/2017/04/05/springboot7/ ------------------ logback使用指南. 公司配置 <?xml version=" ...