Java集合-Collection八股文

本文深入探讨Java中的Collection接口及其子接口List和Set。List接口的实现类ArrayList、Vector和LinkedList各有特点:ArrayList查询效率高,插入删除慢;Vector扩容是原来两倍;LinkedList适用于频繁插入删除操作。Set接口的实现如HashSet基于HashMap,TreeSet基于TreeMap,保证元素不重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Collection

Collection是Java的一个集合相关的接口,主要完成单数据的存储,同时它继承了Iterable接口,其实现类都可以使用迭代器进行遍历。

Collection常用的子接口有:List、Set。

  • List:元素有序,可重复
  • Set:元素无序,不可重复

2.List

List的常用实现类有ArrayList、Vector、LinkedList

ArrayList和Vector的底层逻辑结构都是数组,查询效率高,增加、删除效率低;
ArrayList是线程不安全的,而Vector是线程安全的

LinkedList的底层逻辑结构是双向链表,查询效率低,增加、删除效率高

2.1.ArrayList

ArrayList在Jdk1.7中,使用无参构造时,默认初始化数组长度为10;在扩容时,扩容至原来的1.5倍

Jdk1.8中,使用无参构造时,默认底层数组为空数组
在第一次添加数据时,取默认容量10和至少需要的容量的最大值,初始化底层数组,往后再需要扩容时,扩容至原来的1.5倍

2.2.Vector

Vector在Jdk1.8中,使用无参构造时,默认初始化数组长度为10;在扩容时,扩容至原来的2倍

2.3.LinkedList

LinkedList在使用无参构造时,头节点和尾结点都为Null,size为0;使用尾插法添加数据;
通过索引index来获取数据的时候,如果index小于size的一半,从头节点开始遍历;如果index大于等于size的一半,从尾节点开始遍历

3.Set

Set的常用实现类有HashSet、TreeSet

HashSet的底层就是HashMap,存储数据时,以数据作为key,Object空对象作为value,存储到hashMap中

TreeSet的底层也是TreeMap

### Java Collection 框架核心概念 #### 集合框架概述 Java Collection Framework (JCF) 提供了一系列用于存储和操作一组对象的标准接口和类。Collection 接口是整个集合层次结构的根接口,而 Map 不继承自 Collection 接口。 #### 主要接口及其关系 - **List**: 存储有序可重复元素;允许随机访问。 - **Set**: 存储无序不可重复元素。 - **Queue/Deque**: 用于实现队列的数据结构,支持先进先出(FIFO),双端队列还支持两端插入删除。 - **Map**: 键值对映射表,不允许有相同key存在。 #### 常见实现类特性说明 | 类型 | 特征 | | --- | --- | | ArrayList | 动态数组,线程不安全,查询效率高 O(1), 插入删除低效O(n)[^1]| | LinkedList | 双向链表,适合频繁增删场景, 查询性能较差 O(n)[^1] | | HashSet | 底层基于HashMap实现,提供快速查找功能 O(1)[^3] | | TreeSet | 自动排序 Set 实现,底层红黑树结构,保证自然顺序或定制化Comparator排序 [^3]| #### 关于泛型的支持 自从引入了泛型机制之后,在定义集合变量时可以指定其内部所容纳的具体类型参数,这不仅提高了程序的安全性和易读性,而且减少了强制转换带来的麻烦。 ```java // 使用ArrayList保存字符串类型的实例 List<String> list = new ArrayList<>(); list.add("hello"); ``` #### 同步与并发处理 对于多线程环境下的共享资源竞争问题,部分容器提供了同步版本(如Vector),但对于更高效的解决方案,则推荐使用`ConcurrentHashMap`, `CopyOnWriteArrayList`等并发友好型组件来替代传统方式。 ```java // 创建一个线程安全的列表 List<Integer> threadSafeList = Collections.synchronizedList(new ArrayList<>()); ``` #### 迭代器模式的应用 Iterator 和 ListIterator 是遍历集合的重要工具,前者适用于所有实现了 Iterable 接口的集合,后者则专属于 List 结构,能够前后双向移动并修改元素。 ```java // 获取迭代器进行循环打印 for (Iterator<String> it = set.iterator(); it.hasNext();) { System.out.println(it.next()); } ``` #### Stream API 的集成 随着 JDK8 发布以来,Stream 流式编程模型成为 JCF 新宠儿之一,简化了许多复杂逻辑表达的同时也提升了开发体验。 ```java // 利用stream过滤偶数并求平方后收集到新列表里 List<Integer> result = numbers.stream() .filter(x -> x % 2 == 0) .map(x -> x * x) .collect(Collectors.toList()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值