Java集合,你真的了解吗? - Go语言中文社区

Java集合,你真的了解吗?


集合的本质

集合的主要作用是存储对象的容器。

大家耳熟能详的容器(集合)类,有 ArrayList,HashMap,HashSet.等等 相信大家去面试时,面试官经常会问 ArrayList,LinkedList 怎么选择? HashMap 底层的数据存储组织能详细聊聊吗?等问题
那么为什么会有这种多的容器呢?又或者说为什么面试官在乎这些问题呢? 从我的理解来看,因为不同的集合容器类,他的特点不一样,或者说不同的集合类可以基于不同的场景进行选择。集合(容器)的底层是由于数据组织的方式不一样。或者这么理解:出现不同的集合是因为他们的数据结构不一样,从而出现了不同的特性。

数据结构

数组:
特点:
1.连续的空间要求
2.可以通过下标的成员访问,下标访问的性能高(有索引)
3.增删操作带来更大的性能消耗(保证数据越界的问题,需动态扩容)
典型的 JAVA 集合类 ArrayList
在这里插入图片描述
链表(双向为例)
特点:
1.灵活的空间要求,存储空间不要求连续
2.不支持下标的访问.支持顺序的遍历搜索(那么有个问题:LinkedList 有下标访问get(index)方法,怎么回 事?后续LinkedList 详细讲解)
3.针对增删操作找到对应的节点改变链表的头尾指向即可,无需移动元素存储位 置
典型的 Java 集合类 LinkedList
在这里插入图片描述
树(二叉查找树)
特点:
1.灵活的空间要求,存储空间不要求连续,可按指定顺序进行排列
2.不支持下标的访问,支持近似二分的查找访问方式
3.增删操作有一个节点查找的过程,操作之后还存在树的平衡保证问题
4.增删改变节点的引用关系,无需移动元素的存储位置
典型的 Java 集合类 TreeMap
在这里插入图片描述

集合的派系整体认识

Java 中集合类分为 2 大主要派系:Collection 和 Map

Collection派系

在这里插入图片描述

Collection 是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和 属性。

Collection 实现了 Iterable 接口来完成集合中元素的迭代遍历能力 Iterator iterator();
Collection 包含了 List 和 Set 两大分支。
1.List 是一个有序的队列,每一个元素都有它的索引。List 的实现类有 LinkedList, ArrayList, Vector。
2.Set 是一个不允许有重复元素的集合。Set 的实现类有 HastSet 和 TreeSet。(注意:HashSet 依赖于 HashMap。它实际上是通过 HashMap 实现的;TreeSet 依赖于 TreeMap,它实际上是通过 TreeMap 实现的。)
Iterator:

Iterator 是一个接口,它是集合的迭代器。集合可以通过 Iterator 去遍历集合 中的元素。Iterator 提供的 API
接口,包括:是否存在下一个元素、获取下一 个元素、删除当前元素
abstract boolean hasNext()
abstract E next()
abstract void remove()

Map 派系

在这里插入图片描述

Map 是一个映射接口即 key-value 键值对

1.Map 提供接口分别用于返回键集、值集或键-值映射关系集。
entrySet()用于返回 键-值集的Set 集合
keySet()用于返回键的Set 集合
values()用户返回值集的Collection 集合
注意:因为 Map 中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是 Set,值在 Map 中是可以允许重复的所有值集是Collection。
2.Map 提供了“键-值对”、“根据键获取值”、“删除键”、“获取容量大小”等基 本方法。
V get(Object key);
V remove(Object key);
int size();、

Map 派系与 Collection 派系有什么关系?

大家用HashMap 应该都有针对 HashMap 的key 和value进行遍历的操作吧. 具体使用如:
hashMapObj.keySet() ;获取所有键的集合
hashMapObj.values() ;获取所有值的集合
所以整理来讲 Map 派系需要依赖 Collection 派系.
而 在 我 们 Collection 的 Set 分 支 中 ,HashSet 和 TreeSet 又 是 依 赖 于 HashMap 和 TreeMap 进行实现(具体分析在后续 Set 集合类中) 所以说两大集合派系是相辅相成的,最终的图示,大家可以看下图:
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45240169/article/details/104210633
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢