前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java集合框架

Java集合框架

原创
作者头像
想名字好难
修改2021-04-06 11:41:24
9620
修改2021-04-06 11:41:24
举报
文章被收录于专栏:个人学习记录个人学习记录

Java的集合主要分为Collection和Map两大体系

  • Collection :主要由List、Set、Queue接口组成
  • List代表有序、重复的集合
  • Set代表无序、不可重复的集合
  • Queue为先进先出的队列
  • Map:则代表具有映射关系的键值对(key-value)集合

Collection接口下的简易继承关系图如下:

b1712b236bcf6aa63cea8c3de290e9b7.png

通过对集合框架的分析其主要可以分为如下几个部分

  • 数据结构:List列表、Queue队列、Deque双端队列、Set集合、Map映射
  • 比较器:Comparator比较器、Comparable排序接口
  • 工具类:Collections常用算法类、Arrays静态数组的排序、查找算法
  • 迭代器:Iterator通用迭代器、ListIterator针对 List 特化的迭代器

以下依次简单介绍

1、List

List集合的特点就是存取有序,可以存储重复的元素,可以用下标进行元素的操作。

其主要实现类:ArrayList、LinkedList、Vector、Stack。

1.1、ArrayList

ArrayList就是一个动态数组,支持随机存取,但是插入删除效率很低(需要对数据进行偏移)。当数组空间不足时会自动扩容(创建一个更大的数组,并进行数组复制)。

1.2、LinkedList

LinkedList 是一个双向链表结构,不支持随机存取,只能进行顺序遍历,但由于是链表实现,插入删除效率很高。

1.3、Vector

Vector 也是一个动态数组结构,是一个元老级别的存在。ArrayList 大部分的方法和 Vector 比较相似,两者的主要差别为,Vector 是允许同步访问的,Vector 中的操作是线程安全的,但是效率低,而 ArrayList 所有的操作都是异步的,执行效率高,但不安全。

关于Vector,现在用的很少了,因为里面的get、set、add等方法都加了synchronized,以保持线程同步,降低了效率。

1.4、Stack

Stack是Vector的一个子类,其本质也是一个动态数组,但是他是一个先进后出的栈结构。(可以使用双端队列ArrayDeque代替)

2、Set

Set集合为一个存取无序,且元素不可重复的集合。

其主要实现类:HashSet、LinkedHashSet 和 TreeSet。

HashSet、LinkedHashSet 和 TreeSet都是基于HashMap、LinkedHashMap 和 TreeMap的键(Key)实现的,使用 Map 中键不能重复、无序的特性。其主要的使用都比较类似,只需要重点关注Map即可。

3、Queue

Queue是一个队列集合,队列通常是指“先进先出”(FIFO)的容器。新元素插入到队列的尾部,访问元素操作会返回队列头部的元素。

主要实现类:ArrayDeque、LinkedList、PriorityQueue。

3.1、ArrayDeque

ArrayQueue是一个基于数组实现的双端队列,在队列中存在两个指针,一个指向头部,一个指向尾部,因此它具有队列的方法特性。

3.2、LinkedList

LinkedList是List接口的实现类,也是Deque的实现类,底层是一种双向链表的数据结构。

3.2、PriorityQueue

PriorityQueue也是一个队列的实现类,此实现类中存储的元素排列并不是按照元素添加的顺序进行排列,而是内部会按元素的大小顺序进行排列,是一种能够自动排序的队列。

4、Map

Map是一个双列集合,其中保存的是键值对(Key-Value),键要求保持唯一性,值可以重复。

Map 主要实现类:HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties。

4.1、HashMap

HashMap继承自AbstractMap,底层采用哈希表存储数据,其输入输出顺序基本不一致,HashMap最多只允许一条记录的 key 为 null。

4.2、LinkedHashMap

HashMap 的子类,内部使用链表数据结构来记录插入的顺序,使得输入的记录顺序和输出的记录顺序是相同的。这就是其与HashMap 的不同之处。

4.3、TreeMap

能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用 Iterator 遍历时,得到的记录是排过序的。

4.4、IdentityHashMap

IdentityHashMap继承自AbstractMap,与HashMap有些不同,在获取元素的时候,通过==代替equals ()来进行判断,比较的是内存地址。

4.5、WeakHashMap

WeakHashMap继承自AbstractMap,被称为缓存Map,向WeakHashMap中添加元素,再次通过键调用方法获取元素方法时,不一定获取到元素值,因为WeakHashMap 中的 Entry 可能随时被 GC 回收。

4.6、Hashtable

Hashtable,一个元老级的类,键值不能为空,与HashMap不同的是,方法都加了synchronized同步锁,是线程安全的,导致效率较慢。

4.7、Properties

Properties 继承于 Hashtable,表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、List
    • 1.1、ArrayList
      • 1.2、LinkedList
        • 1.3、Vector
          • 1.4、Stack
          • 2、Set
          • 3、Queue
            • 3.1、ArrayDeque
              • 3.2、LinkedList
                • 3.2、PriorityQueue
                • 4、Map
                  • 4.1、HashMap
                    • 4.2、LinkedHashMap
                      • 4.3、TreeMap
                        • 4.4、IdentityHashMap
                          • 4.5、WeakHashMap
                            • 4.6、Hashtable
                              • 4.7、Properties
                              相关产品与服务
                              容器服务
                              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档