Java Map底层实现思路

package cn.com.commsoft.map;

public class MyMap {
	MyEntry[] arr = new MyEntry[100];
	int size;
	/**
	 * 采用hash算法实现map,(每个对象都有一个地址,
	 * 根据地址生成的一个hash码,由于每个对象的地址都不一样,所以
	 * 生成的hash码是唯一的)
	 * @param key
	 * @param value
	 */
	public void put(Object key, Object value){
		MyEntry my = new MyEntry(key, value);
		//相当于地址映射函数,但是会产生地址映射冲突
		int a = (key.hashCode()%100);
		//思路一:当地址冲突时,采用开放地址法处理冲突
		while(arr[a].key != null){
			a++;
		}
		//思路二:当地址冲突时,采用链表法处理冲突
		arr[a] = my;
	}

	public Object get(Object key){
		int a = (key.hashCode()%100);
		return arr[a].value;
	}
}

class MyEntry{
	Object key;
	Object value;
	public MyEntry(Object key, Object value) {
		super();
		this.key = key;
		this.value = value;
	}

}
内容还会继续更新,敬请关注!
时间: 2024-08-27 16:15:39

Java Map底层实现思路的相关文章

Java Map 如何实现Key 的唯一性?

大家都知道,在Map和Set不可存在重复元素? 但是对于内部的细节我们并不了解,今天我们就一块来 探讨一下! 1 对于 HashMap  HashSet 他们的底层数据结构的实现是:维护了一张  HashTable .容器中的元素全部存储在Hashtable 中.他们再添加元素的时候,是如何判断是否存在有重复元素的呢?  每一个被添加的元素都有一个 hashCode(哈希值),他们先比较哈希值,是否相同? 不相同的元素,添加进入 HashTable.   如果hashCode相同的话, 再去比较

[Java] MAP、LIST、SET集合解析

在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系: java.util        +Collection 这个接口extends自 --java.lang.Iterable接口           +List 接口               -ArrayList 类              -LinkedList 类              -Vector 类     此类是实现同步的 +Queue 接口              +不常用,在

java Map练习-获取字符串中字母出现次数(TreeMap实现)

/* 练习: "kbashbdjsgfwhofihbfkwejhfiubjzfhaads"获取该字符串中的字母出现次数. 希望打印结果:a(3)b(4)d(2)... 通过结果发现,每一个字母都有对应的次数.. 说明字符和次数之间都有映射关系. 注意:当发现有映射关系是,可以选择map集合. 因为map集合中存放的就是映射关系. 为什么使用map集合呢? 当数据之间存在着映射关系时,就想到了map集合. 思路: 1,利用String类的charAt()方法遍历字符串中的每一个字符. 2

java Map排序(升序、降序、随机排序)

基础知识: 1 HashMap会使用key,根据hashcode进行默认排序. 2  LinkedHashMap根据存入先后进行排序 代码展示: 1 随机排序 java Map排序(升序.降序.随机排序),布布扣,bubuko.com

Java Map遍历方式的选择

1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率.那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value.遍历key.遍历value等不同场景下的差异,我试着进行了一些对比测试. 2. 对比测试 一开始只进行了简单的测试,但结果却表明k

java Map使用Object 做为Key的问题

近期在看dnsjava 源码的时候,不经意间发现一个自己没有想过的问题: HashMap 如何使用key去查找对应的value的,这个问题很难用语言描述的清楚,那就使用代码来进行说明吧! public class test { public static void main(String[] args) { a aa = new a(); b bb = new b(); Map<Object,Object> c = new HashMap<Object,Object>(); c.p

java Map实现的cache manager

一个模仿memcached的JAVA虚拟缓存工具,可以缓存java对象 1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.ObjectInputStream; 4 import java.io.ObjectOutputStream; 5 import java.util.concurrent.ConcurrentHashMap; 6 import java

java map按照value值来比较大小并且返回最终结果

代码下载地址:http://www.zuidaima.com/share/1830834176347136.htm 原文:java map按照value值来比较大小并且返回最终结果 package com.zuidaima.util; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class ValueComparator

【JAVA】六 JAVA Map 一 HashMap

[JAVA]六 JAVA Map 一 HashMap JDK API java.util Interface Map Type Parameters: K - the type of keys maintained by this map V - the type of mapped values All Known Subinterfaces: Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, LogicalMe