Java面试题:Java 容器都有哪些?

本文将介绍 java 中有哪些容器。

Java面试题:Java 容器都有哪些?

Java 集合框架主要包括两种类型的容器:

(1)集合(Collection)

(2)图(Map)

Collection 接口又有 3 种子类型,List、Set 和 Queue。

List列表(有序,可重复)

List 接口扩展自 Collection,它可以定义一个允许重复的有序集合,从 List 接口中的方法来看,List 接口主要是增加了面向位置的操作,允许在指定位置上操作元素,同时增加了一个能够双向遍历线性表的新列表迭代器 ListIterator。AbstractList 类提供了 List 接口的部分实现,AbstractSequentialList 扩展自 AbstractList,主要是提供对链表的支持。

  • ArrayList 数组列表,有序,可重复,内部是通过Array实现。对数据列表进行插入、删除操作时都需要对数组进行拷贝并重排序。因此在知道存储数据量时,尽量初始化初始容量,提升性能。

  • LinkedList 双向链表,每个元素都有指向前后元素的指针。顺序读取的效率较高,随机读取的效率较低。

  • Vector 向量,线程安全的列表,与 ArrayList 一样也是通过数组实现的,不同的是 Vector 是线程安全的,也即同一时间下只能有一个线程访问 Vector,线程安全的同时带来了性能的耗损,所以一般都使用 ArrayList。

  • Stack 栈,后进先出(LIFO),继承自 Vector,也是数组,线程安全的栈。但作为栈数据类型,不建议使用 Vector 中与栈无关的方法,尽量只用 Stack 中的定义的栈相关方法,这样不会破坏栈数据类型。

  • ArrayQueue 数组队列,先进先出(FIFO)

Set集合(无序、不可重复)

Set 集合不允许包含相同的元素,Set 判断两个对象相同不是使用 == 运算符,而是根据 equals 方法。也就是说,只要两个对象用 equals 方法比较返回的是 true,Set 就不会接受这两个对象;反之,只要两个对象用 equals 方法比较返回 false,Set 就会接受这两个对象。

  • HashSet 基于 HashMap 实现的集合,对HashMap做了一些封装。与HaspMap不同的是元素的保存为链表形式,插入数据时遍历链表查看是否有相同数据,有则返回false,没有则返回true.

  • LinkedHashSet 链表集合,继承自HashSet与LinkedHashMap相似,是对LinkedHashMap的封装。

  • TreeSet 红黑树集合,与TreeMap相似,是对TreeMap的封装。

Queue队列(有序、可重复)

队列是一种先进先出的数据结构,元素在队列末尾添加,在队列头部删除。Queue 接口扩展自 Collection 接口,并提供插入、提取、检验等操作。

接口 Deque,是一个扩展自 Queue 的双端队列,它支持在两端插入和删除元素。

  • ArrayDeque 数组实现的双端队列,可以在队列两端插入和删除元素

  • LinkedList 类实现了 Deque 接口,所以通常我们可以使用 LinkedList 来创建一个队列。

  • PriorityQueue 类实现了一个优先队列,优先队列中元素被赋予优先级,拥有高优先级的先被删除。

Map映射 /字典(无序,键值对,键唯一)

Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 key,另外一组用于保存 Map 里的 value,key 和 value 之间存在单向的一对一的关系,即通过指定的 key,总能找到唯一的、确定的 value。

  • HashMap  哈希映射/字典,无序字典,键值对数据,key是唯一的,Key 和 Value 都可以为null

  • TreeMap  红黑树实现的 key->value 融合,可排序,红黑树是一种自平衡二叉查找树。

  • LinkedHashMap  链表映射/字典,继承了 HashMap 的所有特性,同时又实现了双向链表的特性,保留了元素插入顺序。

一寸光阴一寸金,寸金难买寸光阴。——《增广贤文》
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号