数据结构
文章平均质量分 65
以原码的角度分析java常用数据结构的实现,以及各自有什么特性
程序员嘟嘟
持续更新一些程序员编程的基础知识及前沿技术文章,目前“算法和数据结构和Java虚拟机”系列分享文章正在连载中...
展开
-
LinkedHashMap源码分析
LinkedHashMap源码分析概述该类继承了HashMap,所以它有HashMap的所有特性,在其内部以双向链表的形式维护数据,这样就维护了内部数据的有序性,即插入时的顺序就是迭代时的顺序。当设置了accessOrder访问模式时,对结构中的元素进行访问时,会始终将被访问的元素移动到链表的尾部,这种特性非常适合用于实现LRU绑在机制。成员变量// 双向链表的头部结点,也是最早添加到其内部的数据transient LinkedHashMapEntry<K,V> head;// 双原创 2021-09-02 22:55:54 · 117 阅读 · 0 评论 -
HashTable源码分析,线程安全的哈希表
概述该类实现了一个键值对进行存储的哈希表,类似于HashMap,它也有两个可能影响其性能的参数:初始容量和负载因子,这里的容量也与HashMap中一样,是内存存储结构中哈希数组的长度,通常其默认的负载因子也是0.75。另外这个类是内部实现同步的,它的操作是线程安全的,如果在开发时不需要考虑数据的线程安全问题,可参考虑使用HashMap,效率更高一些,在实际使用时按实际情况具体决定。成员变量// 以键值对的形式存储为数组private transient HashtableEntry<?,?&g原创 2021-08-30 13:04:53 · 353 阅读 · 0 评论 -
HashMap源码分析,高效的键值对存储结构
概述HashMap是基于哈希表结构并实现了Map接口的一种数据存储结构,实现了几乎所有的Map操作,其可以允许null的value和null的key,它不以保持元素在其中的存储顺序,HashMap有两影响其性能的参数:初始容量和负载因子,容量就是哈希表中的桶数(如果哈希函数能够完美平均分散,则可以认为,一个桶中存储一个数据元素),初始容量是创建HashMap时设置的容量,负载因子是哈希表在何时扩容的一个试题值,当哈希表中存储的数据条目超过负载因子与总容量的乘积时,需要对哈希表进行扩容,并对存储的数据原创 2021-08-27 23:56:50 · 253 阅读 · 0 评论 -
LinkedList源码分析
LinkedList概述LinkedList实现的接口List和Deque,实现了几乎所有的LIst接口操作,其中保存的数据也可以是null。在其内部也不有实现线程安全的方法,所以其也是线程不安全的,跟ArrayList一样,多线程编程时要考虑同步的问题。其定义了一个Node内部类,表示一个双向链表上一个个节点,其内部使用双向链表来实现数据存储的。private static class Node<E> { E item; Node<E> next; ...原创 2021-08-27 13:18:04 · 65 阅读 · 0 评论 -
Vector源码分析
概述Vector跟ArrayList类似,也定义了一个可以大小可调整的结构,其内容可以重复也可以为null,另外在其内容实现了线程安全的机制,不用考虑线程同步的问题,其它操作与ArrayList基本类似 ,但是其添加删除操作就有所区别,构造函数从下面的构造函数中可以看出Vector默认初始化10个大小的数据容量,也可以通过重载的构造函数在创建时指定容量的每次扩容大小。public Vector() { this(10);// 默认容量10个元素}// 从其它集合构建一个Vect..原创 2021-08-27 13:13:10 · 69 阅读 · 0 评论 -
ArrayList源码分析
ArrayList概述ArrayList是一个可调整容量大小的数组,其实现了List接口,可以存放任意元素包括null,其内部实现是数组,get、set、Iterator操作是固定时间内运行,效率较高,但是add、remove操作效率稍低。不是线程安全的类,如果有多个线程访问该类的实例,并且至少有一个线程在修改列表,则必须在外部进行同步成员变量// 初始化时如果没有指定容量大小,则默认容量为10private static final int DEFAULT_CAPACITY = 10;原创 2021-08-27 13:03:47 · 74 阅读 · 0 评论