`
latex
  • 浏览: 29162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.util.LinkedHashMap源码学习(二)

阅读更多
LinkedHashMap中重要的方法:

1. void clear()
调用HashMap中的clear方法清空数据,同时设置before和after都指向header。

2. boolean containsValue(Object value)
重写了HashMap中的containsValue方法,现在查询和table的容量无关了,只与实际存储的数据量有关。

3. V get(Object key)
得到指定key所对应的value。如果accessOrder为true时会调整所访问的Entry的位置。

4. void addEntry(int hash, K key, V value, int bucketIndex)
调用createEntry(hash, key, value, bucketIndex),如果需要删除旧的数据,则调用removeEntryForKey(eldest.key)删除旧数据;如果不需要删除旧数据,则根据threshold来判断是否需要增加table的容量。

5. void createEntry(int hash, K key, V value, int bucketIndex)
在原来的Entry前面增加一个Entry。

6. void init()
在HashMap中init()方法没有实现,而在LinkedHashMap中实现了init()方法。设置before和after都指向header

7. void transfer(HashMap.Entry[] newTable)
利用链表的新特性重写,从而提高性能。不是对table进行迭代,而是对链表进行迭代。


LinkedHashMap中的内部类:
1. private static class Entry<K,V> extends HashMap.Entry<K,V>
LinkedHashMap中的Entry相比父类HashMap多了两个字段:Entry<K,V> before, after用来实现双向链表。其中void recordAccess(HashMap<K,V> m)实现了父类的空方法,当字段accessOrder值为true时,调用map.get或map.set时使用remove和addBefore方法把当前的Entry移到链表的前面,实现按访问的顺序排序。


分享到:
评论

相关推荐

    java.util源码-JavaUtility-SourceCode:JavaUtility-SourceCode

    这个源码分析将深入探讨`java.util`包中的关键组件,了解它们的工作原理,这对于任何Java开发者来说都是至关重要的。`java.util`包包括集合框架、日期时间API、事件模型、散列映射、队列、栈、优先队列、随机数生成...

    java数据结构源码

    Java的`java.util.HashMap`和`java.util.LinkedHashMap`是两种常见的散列表实现。 12. 双向链表:双向链表中的每个节点包含前后两个指针,支持双向遍历。Java的`java.util.Deque`接口和`java.util.LinkedList`类...

    java.util源码-Java-utils:各种实用Java源代码

    在Java编程语言中,`java.util`包是核心库的一部分,包含了大量用于处理日常编程任务的类和接口。这个包提供了各种数据结构(如ArrayList、LinkedList、HashSet、HashMap)、集合框架、日期时间处理、随机数生成、IO...

    Java数据结构和算法(源码)

    Java的`java.util.HashMap`和`java.util.LinkedHashMap`是常见的哈希表实现。 8. 栈和队列的变种:例如,堆(优先队列)提供了按优先级排序的队列,Java的`java.util.PriorityQueue`实现了这个功能。 接下来,我们...

    javajdk1.8源码-Java-source-reading:jdk1.8源代码分析

    缓慢更新一些个人学习java相关源码过程中的笔记,在这里你将不可避免地看到以下情况: 个别不懂/没想好的地方留空待补全 限于个人水平出现的解读错误 编辑错误 排版不统一 如发现有错,欢迎指正! 如果对你有用,...

    java算法大全最新完整无错版(含源码包)

    Java的`HashMap`和`LinkedHashMap`实现了哈希表。 二、排序算法 1. 冒泡排序:简单的交换排序,效率较低,但易于理解。 2. 插入排序:将未排序的元素逐个插入到已排序的序列中,适合小规模或接近有序的数组。 3....

    基于Java的实例源码-Java缓存工具 SimpleCache.zip

    3. **线程安全**:由于缓存可能在多线程环境中使用,因此`SimpleCache`可能考虑了线程安全问题,使用了`synchronized`关键字或者`java.util.concurrent`包中的工具类来保证并发访问的正确性。 4. **性能优化**:...

    java源码结构-data-structures-java:数据结构源代码

    Java的`java.util.HashMap`和`java.util.LinkedHashMap`实现了哈希表。 了解和掌握这些数据结构对于任何Java开发者来说都至关重要,因为它们是解决问题和优化代码性能的基础。通过阅读和研究这个开源项目的源代码,...

    Java基础学习25.pdf

    根据提供的文件信息,以下是关于Java基础学习的知识点总结: ### Java基础概念 1. **Set接口概述**:Set接口的特性是无序(元素插入顺序不保留)和不可重复(不允许出现重复元素)。它是Java集合框架的一部分,...

    高速缓存实现源码

    通过深入研究这个项目的源码,我们可以学习如何在Java中高效地实现高速缓存,以及如何利用并发优化性能。这对于开发高性能、高并发的应用程序是非常有价值的。同时,理解并掌握缓存的原理和实践,对于提升软件系统的...

    LRU_缓存策略_LRU_缓存.zip

    Java中,可以使用`java.util.LinkedHashMap`类,通过设置`accessOrder`为`true`来实现LRU缓存。Python中,有第三方库`functools.lru_cache`提供了内置的LRU缓存功能。在C++中,可以自定义数据结构来实现LRU缓存。 ...

    实现了LRU算法的缓存

    可以使用`synchronized`关键字或者`java.util.concurrent`包中的工具,如`ConcurrentHashMap`来实现线程安全的缓存操作。 6. **性能优化**: - 使用`WeakReference`或`SoftReference`可以避免内存泄漏,尤其是在...

    dataStructure

    数据结构是计算机科学中的核心概念,它涉及到如何...这个"**dataStructure-master**"可能包含了上述数据结构的Java实现源码,通过学习和实践这些代码,可以深入理解数据结构的工作原理,并能熟练地应用到实际编程中。

    TreeNode-SourceCode.7z

    在Java编程语言中,`HashMap`是一个非常常用的集合类,用于存储键值对。而`TreeNode`类是`HashMap8`(通常...深入学习`TreeNode`的源码,有助于我们更深入地理解`HashMap`的工作原理,从而在实际开发中做出更优的选择。

    自己写的一个随机数的例子,采用hashmap排序

    在Java中,我们可以使用`java.util.Random`类来生成随机数。这个类提供了多种方法,如`nextInt()`用于生成指定范围内的整数,`nextDouble()`用于生成0到1之间的双精度浮点数等。要创建一个Random对象,只需调用`new ...

Global site tag (gtag.js) - Google Analytics