JAVA集合相关介绍

68 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

JAVA集合相关介绍

概述

JAVA集合是对多个数据进行存储的结构,也称为JAVA容器。常见的JAVA集合有List、Set、Map。List和Set都是派生自Collection接口,里面主要是存放单一元素。Map主要存放的是键值对。

List: 存储的数据有序并且是可重复的。

Set:存储的数据无序并且是不可重复的。

Map: 存储的键值对,key-value,key不可重复,value是可重复的。

List

我们一般常用的有ArrayList、LinkedList。

ArrayList和LinkedList比较

  1. ArrayList是基于动态数组的数据结构,LinkedList是基于链表的数据结构。
  2. 随机访问时,get和set时,ArrayList效率要优于LinkedList,LinkedList是基于链表的数据结构,所以查找时需要移动指针从前往后查找。
  3. 元素增加和删除时,LinkedList效率要优于ArrayList,ArrayList是基于数组的数据结构,进行增加和删除操作时,需要对元素的下标进行变更,数据需要进行移动。但是ArrayList和LinkedList插入速度到底谁快谁慢,不一定,和数据量以及数据插入的位置有很大关系。
  4. ArrayList和LinkedList都是不同步的,线程不安全的。
  5. ArrayList的空间使用中会浪费一些空间,ArrayList是基于动态数组的数据结构,所以每次扩容之后,数据未存满的情况下,会有一部分空间浪费,LinkedList在空间浪费主要是在每个元素的空间使用上,LinkedList是基于链表的数据结构,所以每个元素需要存储直接后继、直接前驱以及数据。

Set

我们一般常用的Set集合有HashSet、LinkedHashSet、TreeSet。

HashSet、LinkedHashSet、TreeSet比较

  1. 三者元素都保证唯一,不可重复,都是线程不安全的
  2. HashSet是使用hash表来实现的,LinkedHashSet是基于链表和hash表来实现的,TreeSet底层数据结构是红黑树。
  3. HashSet和LinkedHashSet集合元素可以是null,但是只能有一个null,TreeSet集合元素不能是null。
  4. HashSet元素是无序的,LinkedHashSet元素是有序的,TreeSet是无序的,但是TreeSet实现了两种排序方式,自然排序和定制排序。
  5. 时间复杂度,HashSet为O(1),LinkedHashSet为O(1),TreeSet为O(log(n))。

Map

我们一般使用的是HashMap、TreeMap。

HashMap、TreeMap比较

  1. 都是线程不安全的。
  2. HashMap允许null作为key和value,key不可以重复,value允许重复。TreeMap不允许key为null值,value可以为null值。
  3. HashMap是数组的方式存储key-value,默认初始容量是16,TreeMap是利用红黑树实现。