java中的集合

Java中的集合类有哪些?如何分类的?

Java的集合框架中主要包含以下几种数据结构:

  1. List(列表):有序集合,可以包含重复元素。常见的实现类有ArrayList(基于动态数组实现)和LinkedList(基于链表实现)。
  2. Set(集合):无序集合,不包含重复元素。常见的实现类有HashSet(基于哈希表实现)和TreeSet(基于红黑树实现)。
  3. Queue(队列):一种先进先出(FIFO)的数据结构。常见的实现类有LinkedList(也可以作为队列使用)、ArrayDeque(双端队列)和PriorityQueue(优先队列)。
  4. Stack(栈):一种后进先出(LIFO)的数据结构。在Java中,Stack类继承自Vector类,但现在推荐使用Deque接口的实现类(如ArrayDeque)来代替Stack。
  5. Map(映射):存储键值对(K-V对)的数据结构。常见的实现类有HashMap(基于哈希表实现)和TreeMap(基于红黑树实现)。

从继承关系上讲,List、Set和Queue都是Collection接口的子接口,而Collection接口又继承了Iterable接口。这意味着这些集合都是可以遍历的。

从功能上讲:

  • List代表一个有序容器,元素可以重复。
  • Set是无序的(除了TreeSet,它是有序的),并且元素不可重复。
  • Map存储键值对,通过键来访问值。

从实现上讲:

  • List可以通过链表(如LinkedList)或数组(如ArrayList)实现。
  • Queue可以有不同的实现,如优先队列(PriorityQueue)和双端队列(ArrayDeque)。
  • Map的实现包括普通的HashMap和可以排序的TreeMap。

知识扩展:

Collection和Collections有什么区别?

  1. Collection是一个集合接口,提供了对集合对象进行基本操作的通用接口方法。它是List、Set等的父接口。
  2. Collections是一个包装类,包含各种有关集合操作的静态多态方法。它不能实例化,就像一个工具类,服务于Java的Collection框架。

Java中的Collection如何遍历迭代?

  1. 传统的for循环遍历,基于计数器。
  2. 迭代器遍历,使用Iterator接口。
  3. foreach循环遍历,内部也是采用了Iterator的方式实现。
  4. 迭代器遍历,使用Enumeration接口,这是Iterator的“古老版本”。
  5. Stream API,JDK 1.8中新增,使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。

Iterable和Iterator如何使用?

  • Iterator接口代表迭代的方式,包含next和hasNext方法。
  • Iterable接口代表的是是否可以迭代,如果可以迭代,会返回Iterator接口,即返回迭代方式。

为什么不把Iterable和Iterator合成一个使用?

  1. Iterable和Iterator并不是同时出现的,Iterator先于Iterable出现,目的是为了代替Enumeration。
  2. 将“是否可以迭代”和“迭代方式”抽出来,更符合单一职责原则,使得迭代方式可以被多个可迭代的集合复用,更符合面向对象的特点。
 wechat
天生我才必有用