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 ...
随机推荐
- Squid系统服务脚本
#!/bin/bash # chkconfig: - 90 25 #其中-的意思是所有运行级别 # config: /etc/squid.conf # pidfile: /usr/local/squi ...
- 5、用Numpy实现结构体
1.结构数组: 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组.和C语言一样,在NumPy中也很容易 ...
- SQL里的real类型和tinyint类型在C#里分别对应类型
- ansible基本模块-shell
ansible XXX -m shell -a "XXX"
- Kibana6.x.x源码结构分析笔记
- C# 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。这个错误是什么原因引起的?
C# 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值.这个错误是什么原因引起的? 2011-12-17 22:45 提问者: 匿名|浏览次数:6056次 我来帮他解答 图片 符号 ...
- dotnet体系结构
一.C#与.NET的关系 1.粗略地説,.net是一种在Windows平台上的编程架构————一种API. 2.C#编译器专门用于.net,这表示用C#编写的所有代码总是使用.NET Framewor ...
- php session_id() session_name()
1.Session.use_cookies:默认值为"1",代表SessionID使用Cookie来传递,反之就是用Query_String来传递 2.Session.name:这 ...
- java中的线程(4):常用同步类 CountDownLatch、CyclicBarrier和Semaphore
转自: http://www.cnblogs.com/dolphin0520/p/3920397.html 1.简介 CountDownLatch和CyclicBarrier都能够实现线程之间的等待, ...
- GitHub(hexo)博客页面访问量错误以及中文乱码解决
如果访问量不显示(乱码形状),是因为不蒜子域名更新,所以你的域名也需要更新 <script async src="//busuanzi.ibruce.info/busuanzi/2.3 ...