Java Map是键值对的映射集,在实际编程中非常常见。 有以下实现类:HashMap使用哈希函数。 哈希函数是一种映射关系。根据数据的关键字,可以通过正函数关系计算出该元素的存储位置的函数。 Address = H [key]一个实际的数据结构是拉链链表结构:1 HashTable和HashMapHashTable是由Arthurvan Hoff、Josh Bloch和Neal Gafter编写的。 HashMap的作者是Arthurvan Hoff、Josh Bloch、Neal Gafter和Doug Lea。 这些人不小。 Hashtable为什么被抛弃:Hashtable是线程安全的,效率很低。 不遵循驼峰命名法。 2 WeakHashMapWeakHashMap基于弱引用。 但是Java垃圾收集时,一旦发现弱引用对象,无论当前内存空间是否足够,都会收集弱引用。 在缓存场景中,由于内存有限,无法缓存所有对象,因此需要一种新的删除机制来消除少量对象。 在Tomcat的源代码中,WeakHashMap用于实现缓存。 注意:如果基础类型被用作WeakHashMap的键,某些键将不会被回收。 输出:-128到127的缓存由于底层类型Integer而被保留。 所以那些127的key < Entry不会被自动回收,所以map的大小会稳定在128左右。 但是如果我们用自己的set类作为key,那么在gc之后就会被回收。 output:3 Identity HashMap和Hashmap的主要区别在于IdentityHashMap使用双等号,而Hashmap使用equals() 线性检测意味着,如果散列地址已经有一个值,它将向下线性探测,直到找到一个空地址。 拉链方法之前已经详细介绍过了,这里就不赘述了。