容器关系:Collection

分类

容器按接口可以分为两大类,即CollectionMap。而在Collection中又主要有ListSetQueue三类容器。需注意的是容器中不存放基本类型,因此如果将int、string等基本类型存入容器时,它会自动装箱。

关系图

插入pic

图来自https://www.cnblogs.com/wuyuegb2312/p/3867293.html


共用部分

Iterable接口: 容器中的顶级接口,接口中规定了一个迭代方法,iterator

Collection接口: 定义了集合最基本的方法

AbstractCollection抽象类: 对Collection接口进行了一些基本的实现,减少了实现Collection接口所需要的工作


List

List是一个有序集合,允许重复元素和null。有两种实现方式,数组实现(ArrayList)和链表实现(LinkedList)

ListIterator接口: Iterator只能顺序向后遍历next(),而ListIterator还可以向前遍历previous()

AbstractList抽象类: 对List接口进行了一些基本的实现,比如Iterator

ArrayList类: 相当于动态数组,由数组实现,非线程安全。随机访问get()复杂度为O(1),其他操作如add()remove()O(n)

AbstractSequentialList抽象类: 实现了链表中,根据index索引值操作链表的全部函数

LinkedList类: 双向链表,可看作堆栈、队列或双端队列,非线程安全。remove()和直接添加元素add()复杂度为O(1),其他操作如add(index, E)和随机访问get()O(n)


Set

Set接口模仿了数学概念上的set,各个元素不要求重复,允许一个null元素。主要有三种实现类:HashSet(无序)、LinkedHashSet(有序)和TreeSet(有序)

AbstractSet抽象类: 对Set接口进行了一些基本的实现

HashSet类: 底层用HashMap实现的,线程不安全,允许一个null元素。add()contains()remove()复杂度均为O(1)

LinkedHashSet类: 哈希表和双向链表的结合,插入顺序,线程不安全。add()contains()remove()复杂度均为O(1)。LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。当遍历该集合时,LinkedHashSet将会以元素的添加顺序访问集合的元素。

SortedSet接口: 根据对象的比较顺序(可以是自然顺序,也可以是自定义的顺序),而不是插入顺序进行排序

NavigableSet接口: 在SortedSet的基础上拓展了导航方法lower(E)floor(E)ceiling(E)higher(E)

TreeSet类: 红黑树,底层用NavigableMap实现的,线程不安全,自动排序(自然顺序或自定顺序),不允许null元素。add()contains()remove()复杂度均为O(logN)


Queue

Queue有“队头”的概念,取元素、移除元素、均为对“队头”的操作,通常但不总是FIFO

Deque接口类: 双端队列,既可用作FIFO也可用作LIFO,提供了在队头和队尾进行插入,移除和检查元素的方法

LinkedList类: 见上

AbstractQueue抽象类: 对Queue接口进行了一些基本的实现。其中add()remove()element()基于Queue接口的offer()poll()peek()

PriorityQueue类: 优先级队列,底层由数组实现,线程不安全,堆排序(自然顺序或自定顺序),不允许null元素。堆排序只能保证根是最大或最小,整个堆并不是有序的。插入方法offer()poll()add()remove()复杂度为O(logN)contains(E)remove(E)复杂度均为O(n)。检索方法peek()element()O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值