容器是Java的重要组成部分,在实际应用中选择适当的容器,往往能达到事半功倍的效果。
下图为Java集合框架图,图源于菜鸟教程:
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
从上图中也可以看到,Java的类基本上都继承自Collection和Map。我们平时使用的主要是一些具体实现类,例如ArrayList,LinkedList,HashSet,HashMap等。本文将对这些容器的基础操作进行汇总,以便复习与查阅。
NOTE: 初始化容器时需要注意抽象类(或接口)和具体实现类的区别。抽象类只关心抽象方法的定义,不关心具体如何实现。抽象类不可以实例化对象,也就是说new后面不能接抽象类,而要接具体实现类。否则会引发错误。
- ArrayList
- LinkedList
- Vector
- Stack:Vector的子类
ArrayList和LinkedList常放在一起比较,两者都是线程不安全的。ArrayList的底层是Object数组,LInkedList的底层结构是双向链表。所以两者本质的区别类似于数组与链表的区别(读取、删除等操作有不同)。
Vector的底层同样是Object数组,是线程安全的,但当前大部分情况都使用ArrayList。
初始化方法
NOTE:尖括号里不能用基础数据类型,需要包装。
使用方法
- ArrayList
- LinkedList
ArrayList列举的方法LinkedList都可以用,除此外还有:
- Stack
初始化方法
使用方法
添加、删除、判空、清空都和ArrayList相同。
Queue是Java的队列,队列与栈相反,属于“先进先出”的数据表。Queue是接口,不能直接使用。实现Queue接口的类有:
- LinkedList
- ArrayDeque
- PriorityQueue
PriorityQueue比较特殊,属于优先级队列,可以实现大顶堆或小顶堆。默认是小顶堆。但是可以通过自定义比较器实现其他的需求。
以上几种实现类均非线程安全的。Queue还有一些阻塞的实现类,暂时不在本文记录。
初始化方法
使用方法
- LinkedList
- PriorityQueue
Map的实现类常见的有HashMap。
初始化方法
使用方法
参考:
- https://www.cainiaojc.com/java/
- https://www.runoob.com/java/
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/17438.html