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. POM很重要的3个关系

    POM有3个很重要的关系:依赖.继承.合成. 1.依赖关系 <dependencies></dependencies> 2.继承 <parent></pare ...

  2. 关于Execel 2007 连接到 hive odbc

    官方给出的都是 2010 或2012版的连接方案,看起来与2007有些不同,但我相信这些功能都是通用的. 下载 odbc hive 驱动.http://hortonworks.com/products ...

  3. Eclipse的一下设置

    一.设置自动补全 1.打开 Eclipse -> Window(窗口) -> Perferences(首选项) 2.点开java->Editor(编辑器)->Content A ...

  4. 自旋锁Spin lock与互斥锁Mutex的区别

    POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API.线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用 ...

  5. web图标icon tomcat图标icon

    有时候我们需要更改项目图标为自己的,毕竟tomcat的小猫图标用着不得劲. 你看打开百度等网站时,在地址栏前面就会出现一个蓝色的熊掌状图标或者其他的样式的图标,如果在桌面新建此链接的快捷方式,则桌面图 ...

  6. 【转】org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be res

    如图所示: 看网上的解决方案,有的说是jstl的版本问题,1.0版本引入使用的时候加的uri不带有jsp路径的,1.2的带有/jsp路径,还有的说是依赖冲突的问题,最后尝试了都不行,只有一招能够行的通 ...

  7. em 与 rem 区别.

    em 与自身  字体大小有关. rem 与 body 的字体大小有关..

  8. 非阻塞模式ServerSocketChannel 聊天室服务器端

    import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import ja ...

  9. HDU6470 ()矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意:f[n] = f[n-1] + f[n-2]*2 + n^3; f[1] =1 ; f[2] = 2 ...

  10. HDU 6301 (贪心+优先队列)

    题目大意: 求一个长度为n的数列, 给出m个区间,这m个区间各自区间内的数不同 题解: 用优先队列来模拟过程 , 解题思路是想到了 , 可是不知道如何实现 , 果然还须继续努力呀 这道题思路是去掉重复 ...