博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
容器关系:Collection
阅读量:2351 次
发布时间:2019-05-10

本文共 1750 字,大约阅读时间需要 5 分钟。

分类

容器按接口可以分为两大类,即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)

你可能感兴趣的文章
Java实现PDF的生成(使用IText)
查看>>
MySQL学习笔记
查看>>
数据库连接池
查看>>
MySQL性能优化经验
查看>>
MySQL学习参考
查看>>
Java工程结构管理(BuildPath/系统库/外部库)
查看>>
将代码托管到Coding
查看>>
JS-异步提交表单的几种方式
查看>>
作为一个Java初学者应该注意些什么呢?
查看>>
27岁转行自学Java,真的太晚了吗?
查看>>
自学Java最起码要学到什么程度才能就业?
查看>>
零基础学Java需要做哪些准备?需要注意些什么呢?
查看>>
有了这份阿里大牛手写630页Java高级面试手册,offer稳了【建议收藏】
查看>>
学习Java,需要学到什么程度,才能出去找工作?
查看>>
2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?
查看>>
Java程序员面试大厂的技术标准,你达到要求了吗?
查看>>
为什么Java程序员需求量这么大,还会有人找不到合适的工作?
查看>>
过来人对程序员学习Java的10条建议,第2点很重要!
查看>>
大学生如何学好Java?过来人给你7点建议
查看>>
过来人的经验:Java实习生在公司里一般都做什么?
查看>>