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. CSS复合选择器

    复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,目的是为了可以选择更准确更精细的目标元素标签. 交集选择器 交集选择器由两个选择器构成,其中第一个为标签选择器,第二个为class选择器, ...

  2. SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)

    图结构练习——最短路径 Time Limit: 1000 ms            Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...

  3. 条目十四《使用reserve来避免不必要的重新分配》

    条目十四<使用reserve来避免不必要的重新分配> 使用vector和string的插入元素的时候,我们是不用担心内存问题的(只要不超过容器的max_size).因为底层有分配子管理内存 ...

  4. JavaWeb学习笔记(一)—— Http协议

    一.什么是HTTP协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览 ...

  5. 【转】IntelliJ Idea取消Could not autowire. No beans of 'xxxx' type found的错误提示

    1.问题描述 在Idea的spring工程里,经常会遇到Could not autowire. No beans of 'xxxx' type found的错误提示.但程序的编译和运行都是没有问题的, ...

  6. day--38 mysql表的完整性约束总结

    表的简单查询参考:https://www.cnblogs.com/clschao/articles/9995531.html 一:单表的查询: 查询数据的本质:mysql会去本地的硬盘上面找到对应的文 ...

  7. mysql 查询库中有几张表

    SELECT COUNT(*) TABLES, table_schemaFROM information_schema.TABLESWHERE table_schema = '999*999' 999 ...

  8. POJ_3090 Visible Lattice Points 【欧拉函数 + 递推】

    一.题目 A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal to 0), ...

  9. [转] 利用dockerize模板为容器内应用生成配置文件和环境变量

    [FROM] https://blog.csdn.net/liucaihong123/article/details/51945413 首先试验一下dockerize的可用性: 最近一个docker容 ...

  10. 打ms15-034补丁出现“此更新 不适用于您的计算机”

    1.MS15-034漏洞的补丁是KB3042553; 2.如果在一台Windows Server 2012 R2的服务器上直接安装补丁文件KB3042553,可能会出现“此更新 不适用于您的计算机”的 ...