目录
一.Collection
二.Map
三.Collection和Map的区别
四.应用场景
集合是一组对象的集合,它封装了对象的存储和操作方式。集合框架提供了一组接口和类,用于存储、访问和操作这些对象集合。这些接口和类定义了不同的数据结构,如列表、集合、映射等,以支持各种类型的数据操作。
简单来说,集合是对象的容器,它允许你将多个对象存储在一个单一的数据结构中,并对这些对象进行各种操作,如添加、删除、搜索等。Java集合框架的设计旨在提供一种统一的方式来处理不同类型的集合,从而简化代码的编写和理解。集合类位于java.util包下,都是Collection和Map派生而来的。也就是都是它们的子类或实现类。下面是简要概述:
一.Collection
Collection接口是集合层次结构中的根接口,它为子接口或实现类定义了一些通用方法。下面是Collection体系机构图。【Collection子接口以及实现类介绍请查看】
如上图所示Collection接口有3个子接口,它们扩展了Collection接口的功能,以支持不同类型的集合。下面是对常用的接口或实现类的简述:
- List接口:代表有序的集合,允许重复元素。
- ArrayList:是基于动态数组实现的列表,它提供快速的随机访问性能,并允许动态调整数组大小。
- LinkedList:是基于双向链表实现的列表,它支持在列表的任意位置进行高效的插入和删除操作,并提供双向迭代器。
- Set接口:代表不允许重复元素的集合。不保证元素顺序。
- HashSet: 基于哈希表实现,不支持排序,元素无序。
- TreeSet:基于红黑树实现,元素有序,可以按自然顺序或构造时所指定的比较器(Comparator)顺序排列。
- Queue接口:用于表示元素的先进先出(FIFO)队列,是一种特殊的集合。
- ArrayDeque: 基于数组实现的双端队列,支持在两端进行高效的插入和删除操作。
二.Map
Map 是一种存储键值对(key-value pairs)的集合,Map不是Collection的子接口,但它与集合框架紧密结合,提供了丰富的功能来处理关联数据。
Map接口定义了存储键值对的基本结构。Map中每个键都对应一个值,且每个键都是唯一的,不能重复。下面是常用实现类的简介:
- HashMap:是一个基于哈希表实现的集合,它提供了快速的常数时间复杂度的键值对存储和检索功能,并且允许一个null键和多个null值。
- TreeMap:是一个基于红黑树实现的有序 Map,它保证键值对按照键的自然顺序或指定的比较器顺序进行排序。
三.Collection和Map的区别
- 存储结构:
- Collection:存储的是单一元素的集合,每个元素都是独立的。
- Map:存储的是键值对(键-值对),每个元素由键和值组成,键是唯一的。
- 接口和实现:
- Collection:包括 List、Set 和 Queue 等接口,以及 ArrayList、LinkedList、HashSet 等实现类。
- Map:包括 Map 接口,以及 HashMap、TreeMap、LinkedHashMap 等实现类。
- 元素特性:
- Collection:可以包含重复元素,元素之间没有关联。
- Map:键不能重复,值可以重复,键和值之间存在映射关系。
四.应用场景
- Collection:
- 当你需要存储一组不相关的对象,并且需要频繁地添加、删除或遍历这些对象时,可以使用 Collection。
- 如果需要有序集合,可以使用 List,如 ArrayList 或 LinkedList。
- 如果需要存储唯一元素,可以使用 Set,如 HashSet 或 TreeSet。
- 如果需要实现先进先出(FIFO)的队列操作,可以使用 Queue,如 PriorityQueue 或 ArrayDeque。
- Map:
- 当你需要根据唯一标识符(键)来存储和检索对象(值)时,可以使用 Map。
- 如果需要快速查找与特定键关联的值,可以使用 HashMap。
- 如果需要保持插入顺序或访问顺序,可以使用 LinkedHashMap。
- 如果需要有序的键值对集合,可以使用 TreeMap,这在需要按键排序时非常有用。