集合

数据结构分为:

  1. 逻辑结构:线性表(数组、链表)、图、树、栈、队列

  2. 物理结构:顺序结构、链式结构

以线性表为例,其顺序结构表现就是数组,而链式结构表现就是链表。

顺序结构特点:

  1. 寻址快,通过下标

  2. 但是删除、增加元素效率低

链式结构的特点:

  1. 删除、增加元素快

  2. 寻址慢

  3. 数组长度是固定的,为了保存不定量的数据(Collection),以及具有关系映射的数据(Map)。

因为数组拥有下面的缺点,无法满足所有的场景,故引出集合:

  1. 数组元素长度固定

  2. 添加、删除元素效率很低

  3. 数组只能存放同一类型的数据

  4. 数组不能完成不可重复元素的功能

Java 集合的继承结构

在Java中,集合API又分为两大体系: CollectionMap

Collection

Queue

全是一些与队列相关的方法:

操作抛出异常返回特殊值

插入

add(e)

offer(e)

删除

remove()

poll()

检查

element()

peek()

List

List 主要提供了根据索引操作、查看元素的接口方法。

Set

Set没有特有的方法。不同于List,他是无序(无序不是随机,是按照一种特殊的顺序)存储的。

Map

Map(也称作字典,关联数组)通常用于具有映射关系的数据,所以在Map中存放着两组值,一组存放key,一组存放value,key不允许重复,key和value是一对一的关系。

Set则是由Map包装实现的,Set本质上是一个value相同的Map的key集合。

Map的实现上与Set惊人的相似。

MapSet

HashMap

HashSet

LinkedHashMap

LinkedHashSet

SortedMap

SortedSet

TreeMap

TreeSet

EnumMap

EnumSet

性能比较:

  • HashTable 与 HashMap 类似,但是HashTable 线程安全,古老,所以比较慢

  • TreeMap 比 HashTable与HashMap慢,尤其插入删除时,需要维护顺序(底层使用红黑树管理key-value)

  • LinkedHashMap 相比于 HashMap稍慢一点,因为需要链表维护添加顺序

  • EnumMap最优,但是功能有限

推荐HashMap。

最后更新于