Java各种集合以及特点归纳总结

在Java中有List、 Set、 Map三大集合,其中List与Set是继承自Collection,而Map不是。
文末有三大集合的汇总总结,有需要的可以直接拉到文末。

List集合:

1、ArrayList(最常用)

底层是动态数组,故优缺点同数组:查询快,增删慢
线程不安全,效率高

2、LinkedList

底层是链表,(巧记:和数组优缺点互补)查询慢,增删快
线程不安全,效率高

3、Vector

底层是数组,查询快,增删慢
线程安全,效率低

Set集合:

1、HashSet

(也可参考我的另一篇:https://blog.youkuaiyun.com/tiansheshouzuo/article/details/88902405)
底层是哈希表
哈希表唯一依赖两个方法:hashCode(),equals();
向HashSet集合中放入新元素的执行顺序:
1、调用Hashcode()函数,看是否已经有相同的哈希值
2、如果没有则放入该新元素,如果有则调用equals()函数逐个比对,如果没有,则放入,如果有,则不执行添加元素操作。

2、LinkedHashSet

底层是:哈希表(元素不可重复)+链表(有序,因为链表记录每个元素都记录后一个元素的地址)
PS:何为有序?
有序指的不是自动排序,序指的是元素存入集合的顺序,当元素存入的顺序和元素的排序位置是一致时就是有序

3、TreeSet

底层是红黑树,自然平衡二叉树,因为是二叉树结构所以集合内元素自动按升序排列(升序是其最大特征)。
元素不可重复
(理解思路1:TreeSet是对Set集合的实现,而Set集合都是不可重复的
理解思路2:TreeSet自动排序,添加元素时会调用compareTo(Object obj)方法,遇到重复不添加元素)
有两种排序方法:自然排序(默认升序)和定制排序。

Map集合:(一对数据地去保存:“键+值”)

1、HashMap

底层是哈希表(哈希表的本质是数组+链表)
把它的键套用HashSet的规则即可,只是每个键都附带了其各自的值。

2、LinkedHashMap

底层是哈希表和链表
把它的键套用LinkedHashSet的规则即可,只是每个键都附带了其各自的值。

3、Hashtable

底层是哈希表(哈希表的本质是数组+链表),十分类似于HashMap
与HashMap唯一区别:Hashtable线程安全,效率低,不允许null键null值
HashMap线程不安全,效率高,允许null键null值

4、TreeMap

底层是红黑树,自然平衡二叉树
其键的存储类似于TreeSet,只是每个键都附带了其各自的值(value)。

List集合特点:1、有存放顺序(有序)2、元素可重复

Set集合特点:1、没有存放顺序 2、元素不可重复

Map集合特点:Map属于双列集合,由键值对组成(键+值 成对存储),其中键完全和List集合的特点相同(底层一样),值依附于每一个键上,不受规则影响(比如TreeMap的键不可重复,但值可重复)

### Java集合框架总结 Java集合框架是一组用于处理数据结构的标准库,它提供了多种接口和实现类来满足不同的需求。以下是对其核心部分的详细介绍。 #### Collection 接口及其子接口 `Collection` 是 Java 集合框架中的顶层父接口之一,定义了一系列通用的操作方法。其主要子接口包括 `List`、`Set` 和 `Queue`[^3]。 - **List**: 表示一个有序集合,允许存储重复元素并可以通过索引来访问特定位置上的元素。常见的实现类有 `ArrayList` 和 `LinkedList`[^5]。 ```java List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); System.out.println(list.get(0)); // 输出 "Apple" ``` - **Set**: 不允许存储重复元素,主要用于唯一性约束场景。常见实现类有 `HashSet`、`TreeSet` 和 `LinkedHashSet`。 ```java Set<String> set = new HashSet<>(); set.add("Apple"); set.add("Banana"); boolean isAdded = set.add("Apple"); // 返回 false, 因为已存在该元素 ``` - **Queue**: 主要用于队列操作(先进先出),某些实现还支持优先级队列功能。典型例子是 `PriorityQueue`。 #### Map 接口及其实现类 不同于上述基于单一维度的数据结构,`Map` 提供键值对映射机制,不允许相同的关键字被多次插入。重要成员如下: - **HashMap**: 存储无序键值对,默认不保证迭代顺序;线程非安全版本,在多线程环境下需额外同步措施。 ```java Map<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); System.out.println(map.get(1)); // 输出 "One" ``` - **Hashtable**: 类似于 `HashMap` ,但它本身具备内置锁保护从而达到线程安全性目的,不过性能相对较低。 - **TreeMap**: 自动按照自然排序或者指定比较器排列条目,适用于需要维持一定次序的应用场合。 #### 工具类 Collections 和 Arrays 为了简化开发工作量以及增强灵活性,官方还配套推出了两个实用型静态辅助类别——`Collections` 及 `Arrays` 。前者专注于针对各种容器对象执行批量修改动作或是查询统计信息等功能;后者则集中解决数组层面的任务转换问题。 ```java // 对列表进行反转 Collections.reverse(list); // 查找最大值最小值 int maxVal = Collections.max(intList); ``` --- ### 常见疑问解答 1. 如何选择合适的集合? 应当依据实际业务逻辑特性决定采用何种类型的集合形式最为恰当。如果关注点在于快速随机存取,则倾向于使用 `ArrayList` 或者其他类似的连续内存布局方案;要是更在意频繁增删节点效率的话,那么链表式的解决方案如 `LinkedList` 就显得尤为重要了。 2. 关于并发控制下的集合运用策略? 当面临高频率读写竞争状况下运行程序时,可以考虑引入专门设计用来应对这种情况的新一代容器类型比如 `ConcurrentHashMap` 来替代传统意义上的哈希表结构以获取更好的吞吐表现。 3. 数据序列化兼容性的考量因素有哪些方面需要注意么? 在涉及到持久化的应用案例里头,务必确认所选组件完全遵循 java.io.Serializable 协议规定,并且考虑到未来可能存在的升级迁移风险提前做好规划准备[^4]. ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值