Java面试八股之List、Set、Map和Queue之间的区别

发布于:2024-05-20 ⋅ 阅读:(159) ⋅ 点赞:(0)
  1. Java中List、Set、Map和Queue之间的区别

List

List 是一个有序且允许重复元素的集合。它提供了按索引访问元素的能力,也就是说,你可以通过元素的插入位置或指定的索引来精确地访问、添加或删除元素。List 的典型实现包括 ArrayList 和 LinkedList。

特点:

有序:元素的顺序是固定的,可以通过索引(整数)访问任何位置的元素。

重复:允许存储重复的元素。

常见操作:

按索引访问、插入、删除元素:E get(int index), void add(int index, E element), E remove(int index)

添加、删除元素:boolean add(E e), boolean remove(Object o)

查询包含性:boolean contains(Object o)

遍历:通过 Iterator 或 ListIterator 进行正向、反向遍历,后者还支持双向移动和在迭代过程中修改列表。

Set:

Set 是一个不允许重复元素的集合,其内部通常不保证元素的顺序。Set 的主要作用在于去重和唯一性检查。常见的 Set 实现有 HashSet、LinkedHashSet 和 TreeSet。

特点:

无序(不保证顺序):元素的添加和遍历顺序可能与插入顺序不一致,除非使用如 LinkedHashSet 或 TreeSet 这样的有序 Set 实现。

无重复:不允许存储重复元素,根据元素的 equals() 和 hashCode() 方法判断是否重复。

常见操作:

添加、删除元素:boolean add(E e), boolean remove(Object o)

查询包含性:boolean contains(Object o)

遍历:通过 Iterator 进行遍历。

Map:

Map 是一种键值对(key-value pair)的数据结构,它将键与值关联起来,每个键都是唯一的。Map 通过键来检索对应的值,不允许键重复,但允许值重复。常见的 Map 实现有 HashMap、LinkedHashMap、TreeMap 和 ConcurrentHashMap。

特点:

键值对:存储数据的形式为 (key, value),键唯一,值可以重复。

键无重复:不允许有相同的键,根据键的 equals() 和 hashCode() 方法判断键的唯一性。

无序/有序:取决于具体的实现,如 HashMap 无序,TreeMap 有序(键自然排序或自定义排序)。

常见操作:

插入、删除键值对:V put(K key, V value), V remove(Object key)

通过键查询值:V get(Object key)

查询键值对的存在性:boolean containsKey(Object key), boolean containsValue(Object value)

遍历:通过 Iterator 或 EntrySet 进行遍历,可以获取键值对。

Queue

Queue 是一种遵循先进先出(FIFO,First-In-First-Out)原则的线性数据结构。它主要用于排队或缓冲数据,常用于实现生产者-消费者模型或任务调度。常见的 Queue 实现包括 ArrayDeque、LinkedList(作为 Deque 使用)和 PriorityQueue。

特点:

FIFO:元素的添加和移除遵循先进先出原则。

特殊操作:提供 offer()(添加元素)、poll()(移除并返回头元素)、peek()(查看但不移除头元素)等队列特有操作。

常见操作:

添加元素:boolean offer(E e)

移除元素:E poll()

查看头元素:E peek()

查询队列状态:boolean isEmpty(), int size()

总结:

List 用于有序、可重复元素的存储和访问,支持索引操作。

Set 用于无序、不可重复元素的存储,强调唯一性。

Map 存储键值对,通过键访问关联的值,键唯一,值可重复。

Queue 实现先进先出的队列操作,适用于排队、缓冲等场景。

选择使用哪种集合类型取决于应用程序对数据存储、访问、排序、唯一性等特性的具体需求。

 如果大家需要视频版本的讲解,欢迎关注我的B站:


网站公告

今日签到

点亮在社区的每一天
去签到