Java集合总结

118 阅读2分钟

话不多说,直接上图:

Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的:
Collection 和 Map

顾名思义,容器就是用来存放数据的。

那么这两大接口的不同之处在于:

  • Collection 存放单一元素;
  • Map 存放 key-value 键值对。

学习这些集合框架,我认为有 4 个目标:

  1. 明确每个接口和类的对应关系;
  2. 对每个接口和类,熟悉常用的 API;
  3. 对不同的场景,能够选择合适的数据结构并分析优缺点;
  4. 学习源码的设计,面试要会答啊。

ArrayList于LinkedList区别级别

数组和链表的最大区别就是数组是可以随机访问的

  1. 改查选择 ArrayList; 增删在尾部的选择 ArrayList;
  2. 增删选择 LinkedList;

Vector

Vector有一些年代感了,底层也是用数组来实现,它加了太多的 synchronized, 线程安全的成本就是效率低,在某些系统里很容易成为瓶颈,所以现在大家不再在数据结构的层面加 synchronized,而是把这个任务转移给我们程序员== ArrayList右移补位,扩充1.5倍 Vector右移补位,扩充2倍

List和Set比较

List 的特定是有序可重复的 Set 的特定是无序不重复

Set实现类

HashSet: 采用 Hashmap 的 key 来储存元素,主要特点是无序的,基本操作都是 O(1) 的时间复杂度,很快。

LinkedHashSet: 这个是一个 HashSet + LinkedList 的结构,特点就是既拥有了 O(1) 的时间复杂度,又能够保留插入的顺序。

TreeSet: 采用红黑树结构,特点是可以有序,可以用自然排序或者自定义比较器来排序;缺点就是查询速度没有 HashSet 快。