Java集合篇五:HashMap
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的更多相关文章
- Java集合框架:HashMap
转载: Java集合框架:HashMap Java集合框架概述 Java集合框架无论是在工作.学习.面试中都会经常涉及到,相信各位也并不陌生,其强大也不用多说,博主最近翻阅java集合框架的源码以 ...
- Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 11 hashmap 和 hashtable 的区别
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- java集合系列之HashMap源码
java集合系列之HashMap源码 HashMap的源码可真不好消化!!! 首先简单介绍一下HashMap集合的特点.HashMap存放键值对,键值对封装在Node(代码如下,比较简单,不再介绍)节 ...
- Java集合框架之HashMap浅析
Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
- 【由浅入深理解java集合】(五)——集合 Map
前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap.关于Map的一些通用介绍,可以参考第一篇文章.由于Map与Lis ...
- Java集合系列之HashMap
概要 第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射.HashMap 继承于AbstractMap,实现了Map.Clo ...
- Java 集合框架:HashMap
原文出处:Java8 系列之重新认识 HashMap 摘要 HashMap 是 Java 程序员使用频率最高的用于映射 (键值对) 处理的数据类型.随着 JDK(Java Developmet Kit ...
随机推荐
- 滴滴插件化方案 VirtualApk 源码解析
那么其中的难点很明显是对四大组件支持,因为大家都清楚,四大组件都是需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以现在基本都采用一 ...
- Ubuntu系统使用apache部署多个django项目(python4.3)
/etc/apache2/sites-available/pyweb.conf <VirtualHost *:> ServerName 192.168.1.46 DocumentRoot ...
- BUAA_OO_电梯系列
电梯作业 第一次作业和第二次作业 由于我第一次作业给傻瓜电梯写了捎带所以第一次第二次作业差不多 电梯运行一个线程Elevator,输入控制一个线程Call 一个物理电梯控制表可以完成移动和进出人功能, ...
- ansible基本模块-copy
ansible XXX -m copy -a “src=XXX dest=XXX owner=root group=root mode=0755”
- ionic4 refresh组件位置变更:Ignored attempt to cancel a touchmove event with cancelable=false
io3 中 refresh组件位置可不定: io4 中 须置顶,否则报错,此外complete方法的调用位置改为target属性 参考:https://github.com/ionic-team/io ...
- Python web前端 07 函数及作用域
Python web前端 07 函数及作用域 一.函数 1.有名函数和匿名函数 #函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块 #函数就是包裹在花括号里面的代码块,前面使用了关键字fun ...
- sharepoint_study_2
描述:向SharePoint中批量添加用户 解决:原文地址:http://bbs.winos.cn/thread-89236-1-1.html 一般情况下,要想登录SharePoint server ...
- 【算法笔记】B1015 德才论
1015 德才论 (25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君 ...
- SQL数据库查询一列数据返回一行
SQL:数据库合并列数据:遇到一个更新的问题 想要把查询到的数据某一列拼接成字符串形式返回用的是SQL数据库中的STUFF函数比如 查询到的表(u_College)如下Id Name Age Clas ...
- 设计模式学习总结(七)适配器模式(Adapter)
适配器模式主要是通过适配器来实现接口的统一,如要实现国内手机在国外充电,则需要在不同的国家采用不同的适配器来进行兼容! 一.示例展示: 以下例子主要通过给笔记本电脑添加类似手机打电话和发短信的功能来详 ...