Files
notes_estom/Java/03Java集合类/02 JavaCollection.md
yinkanglong 8090262bff jdbc结束
2023-11-26 18:29:38 +08:00

4.1 KiB
Raw Blame History

准备知识

数据结构分为

  • 线性数据结构
  • 树型数据结构
  • 图型数据结构

C++中的容器分为(都是线性的)

  • 顺序容器
    • array 数组
    • vector向量
    • list 链表
  • 关联容器
    • map 映射
    • set 集合
  • 容器适配器
    • stack 栈
    • queue 队列

Java中的集合容器分为单列集合collection和双列映射Map。除了一下基本集合类型还有多个特殊的类型后续补充

  • List
    • Arraylist有序插入序
    • vector
    • stack
  • Queue
    • linkedlist双端队列有序插入序
    • arrayqueue有序插入序
    • priorityQueue有序自然序
  • Set
    • hashset无序
    • linkedhashset有序插入序
    • treeSet有序自然序
  • Map
    • hashmap无序
    • linkedhashmap有序插入序
    • treemap 有序,自然序

体系

集合框架总览

  1. 集合框架提供了两个遍历接口:IteratorListIterator,其中后者是前者的优化版,支持在任意一个位置进行前后双向遍历。注意图中的Collection应当继承的是Iterable而不是Iterator,后面会解释IterableIterator的区别
  2. 整个集合框架分为两个门派(类型):CollectionMap,前者是一个容器,存储一系列的对象;后者是键值对<key, value>,存储一系列的键值对
  3. 在集合框架体系下,衍生出四种具体的集合类型:MapSetListQueue
  4. Map存储<key,value>键值对,查找元素时通过key查找value
  5. Set内部存储一系列不可重复的对象,且是一个无序集合,对象排列顺序不一
  6. List内部存储一系列可重复的对象,是一个有序集合,对象按插入顺序排列
  7. Queue是一个队列容器,其特性与List相同,但只能从队头队尾操作元素
  8. JDK 为集合的各种操作提供了两个工具类CollectionsArrays,之后会讲解工具类的常用方法
  9. 四种抽象集合类型内部也会衍生出许多具有不同特性的集合类,不同场景下择优使用,没有最佳的集合

对比

章节结束各集合总结:(以 JDK1.8 为例)

数据类型 插入、删除时间复杂度 查询时间复杂度 底层数据结构 是否线程安全
Vector O(N) O(1) 数组 是(已淘汰)
ArrayList O(N) O(1) 数组
LinkedList O(1) O(N) 双向链表
HashSet O(1) O(1) 数组+链表+红黑树
TreeSet O(logN) O(logN) 红黑树
LinkedHashSet O(1) O(1)~O(N) 数组 + 链表 + 红黑树
ArrayDeque O(N) O(1) 数组
PriorityQueue O(logN) O(logN) 堆(数组实现)
HashMap O(1) ~ O(N) O(1) ~ O(N) 数组+链表+红黑树
TreeMap O(logN) O(logN) 数组+红黑树
HashTable O(1) / O(N) O(1) / O(N) 数组+链表 是(已淘汰)