Java集合概览、实现细节、数据结构

总图:

Collection&Map

  • 绿色实线:接口的继承
  • 绿色虚线:接口的实现
  • 蓝色实线:类的继承
  • 红色实线:类的内部类

  从图中可以了解到,集合可以分为两大类:Collection、Map,两者又通过接口的实现类的内部类产生联系(这里是列出了 ValueCollection 这一个,还有别的没有列出来,只为了让结构图看起来整洁);在Collection接口下面有List、Set、Queue三大接口和一个AbstractCollection 虚类,Map接口下面有SortedMap接口、AbstractMap虚类、Hashtable类;它们各自有延伸出一系列的类或接口,从而构建出庞大的Java集合。

下面的图线条说明:

实线是继承关系、虚线是实现接口

1.ArrayList

ArrayList详解:Java基础之ArrayList详解_Allence的博客-CSDN博客一、介绍ArrayList是以什么数据结构实现的ArrayList底层的数据结构是顺序表。顺序表:物理内存上连续、逻辑上连续、大小可以动态扩展顺序表是由数组实现的,说道这里就理一下数组、链表、顺序表之间的关系。逻辑结构:结构定义中是对操作对像的数学描述,描述的是数据元素之间的逻辑关系。例如,线性结构,树形结构,图状结构或网状结构。它们都属于逻辑结构。物理结构:又称存储结构,是数据结构在计算机中的表示(又称映像)。例如,数组,指针。线性表:属于逻辑结构中的线性结构,它包括顺序表和链表。https://blog.csdn.net/m0_37707561/article/details/122527303 

2.LinkedList

LinkedList详解:

LinkedList详解_Allence的博客-CSDN博客java集合总结:ArrayList详解_Allence的博客-CSDN博客一、介绍ArrayList是以什么数据结构实现的ArrayList底层的数据结构是顺序表。顺序表:物理内存上连续、逻辑上连续、大小可以动态扩展顺序表是由数组实现的,说道这里就理一下数组、链表、顺序表之间的关系。逻辑结构:结构定义中是对操作对像的数学描述,描述的是数据元素之间的逻辑关系。例如,线性结构,树形结构,图状结构或网状结构。它们都属于逻辑结构。物理结构:又称存储结构,是数据结构在计算机中的表示(又称映像)。例如,数组,指针https://blog.csdn.net/m0_37707561/article/details/122621760

 3. Stack 和 Vector

Vector和Stack详解:

Vector和Stack详解_Allence的博客-CSDN博客Vector底层实现、数据结构和ArrayList一样都是对数组的操作,只不过Vector的方法经过synchronized修饰是同步的所以Vector是线程安全的,还有扩容的时候如果不指定扩容大小会默认扩容为原来的2倍,ArrayList是1.5倍。Stack是继承Vector,所以底层数据结构也是数组,只不过Stack它是按照栈的逻辑结构实现的,比如push方法在末尾压入一个元素和pop方法就是弹出最后一个元素,search方法也是从后往前查找,这些都是因为栈的特性是后入先出,有一点要注意Sta..https://blog.csdn.net/m0_37707561/article/details/1227211454.HashMap、LinkedHashMap、WeakHashMap

 (1).hashMapHashMap源码解析_AllenC6的博客-CSDN博客_hashmap源码解读一、HashMap用到的数据结构哈希表、数组、链表、红黑树数组、链表这里不再讲了1.哈希表(1).哈希表定义:哈希表又叫散列表,是一种根据设定的映射函数f(key)将一组关键字映射到一个有限且连续的地址区间上,并以关键字在地址区间中的“像”作为元素在表中的存储位置的一种数据结构。这个映射过程称为哈希造表或者散列,这个映射函数f(key)即为哈希函数也叫散列函数,通过哈希函数得到的存储位置称为哈希地址或散列地址(2).哈希冲突定义:对于不同的关键字,可能得到同一个哈希地址,即keyhttps://blog.csdn.net/m0_37707561/article/details/123188241

(2).LinkedHashMap

LinkedHashMap源码解析_AllenC6的博客-CSDN博客从继承关系上,我们看到LinkedHashMap继承了HashMap,它里面的增删改差遍历的逻辑都是使用的HashMap中的,但是LinkedHashMap比HashMap多了一个双向链,这个双向链是从第一个插入的元素开始按照插入顺序,连接起来,所以可以说LinkedHashMap是可以保证插入顺序的。看图:这里就简单的给大家看一下这个链是啥样的,不画红黑树了1).是在创建新节点的时候,把双向链连接起来,注意有两种节点一个是TreeNode一个普通Node源码:代码太简单了,这里简单描述一下,就是添加https://blog.csdn.net/m0_37707561/article/details/125336796

 5.HashTable

HashTable源码解析_AllenC6的博客-CSDN博客HashTable的操作几乎和HashMap一致,主要的区别在于HashTable为了实现多线程安全,在几乎所有的方法上都加上了synchronized锁,而加锁的结果就是HashTable操作的效率十分低下。不建议使用HashTable,Oracle官方也将其废弃,建议在多线程环境下使用ConcurrentHashMap类。HashMap是线程不安全的类,多线程下会造成并发冲突,但单线程下运行效率较高;HashTable是线程安全的类,很多方法都是用synchronized修饰,但同时因为加锁导致并发效率https://blog.csdn.net/m0_37707561/article/details/125375043 

6. TreeMap

  7. HashSet和LinkedHashSet

 8.TreeSet 

9.Collections、Arrays

10.Comparable、Comparator

两个接口,实现comParable接口的类就有了直接和别人比较的能力,例如Integer。

实现了Comparator接口就有了比较两个相同类型的类的能力,实质是工具类。

好的文章:

详解Java中Comparable和Comparator接口的区别_牵着蜗牛_去散步-CSDN博客_comparable和comparator接口的区别Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。接口中通过x.compareTo(y)来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返...https://blog.csdn.net/u010859650/article/details/85009595

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值