1.集合的引入
java集合也叫容器。主要是由两大接口派生而来:一个是 Collection
接口,主要用于存放单一元素;另一个是 Map
接口,主要用于存放键值对。对于Collection
接口,下面又有三个主要的子接口:List
、Set
、 Queue
。
List
(对付顺序的好帮手): 存储的元素是有序的、可重复的。Set
(注重独一无二的性质): 存储的元素不可重复的。Queue
(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。Map
(用 key 来搜索的专家): 使用键值对(key-value)存储,类似于数学上的函数 y=f(x),”x” 代表 key,”y” 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。
容器:用来存储数据,比如数组,链表等等。
这里说的存储是指内存层面的存储,不是持久化存储(持久化存储有:.txt
,.avi
,.jpg
,数据库)。
数组:特点:
(1)数组一旦指定了长度,那么长度就被确定了,不可以更改。
int[] arr = new int[6];
(2)数组一旦声明了类型以后,数组中只能存放这个类型的数据。数组中只能存放同一种类型的数据。
int[] arr,String[] s,double[] d
…..
数组:缺点:
(1)数组一旦指定了长度,那么长度就被确定了,不可以更改。
(2)删除,增加元素 效率低。
(3)数组中实际元素的数量是没有办法获取的,没有提供对应的方法或者属性来获取
(4)数组存储:有序,可重复 ,对于无序的,不可重复的数组不能满足要求。
正因为上面的缺点,引入了一个新的存储数据的结构—》集合
集合一章会学习很多集合,为什么要学习这么多集合呢?
因为不同集合底层数据结构不一样。集合不一样,特点也不一样
1.1总结
- 数组 是一种 静态、低级 的数据结构。它直接对应于内存中的一段连续空间,访问速度快(通过索引),但灵活性差,无法动态改变大小。你可以把它看作是Java语言对底层硬件存储的一种直接映射。
- 集合框架 (Java Collections Framework) 是一套 高级、动态 的工具。它抽象了各种数据存储结构(如链表、哈希表、树),并提供了一套统一、丰富的接口(
List
、Set
、Map
等)和实现类(ArrayList
、HashSet
、HashMap
等)。它的设计目标是提供更强大的功能和更好的灵活性,让你在编程时不必关心底层内存分配的细节。
简单来说,数组是基础,集合是建立在数组等基础结构之上的、功能更强大的抽象。
- 如果你关心的是 元素的顺序,并且需要 频繁地在末尾添加或删除 元素,那么像
ArrayList
这样底层基于动态数组的集合就是很好的选择。 - 如果你需要 频繁地在中间插入或删除 元素,那么像
LinkedList
这样底层基于链表的集合就会比ArrayList
效率高得多。 - 如果你关心的是 元素的唯一性,并且 不关心元素的顺序,那么
HashSet
这样底层基于哈希表的集合是最佳选择。它可以保证元素不重复,并且查找速度极快。 - 如果你需要存储的是 键值对 (Key-Value pairs),那么
HashMap
这样底层基于哈希表的集合是唯一且最优的选择。
每种集合都有其独特的性能特点和适用场景。学习它们,是为了让你在面对不同的编程任务时,能够选择最合适的“工具”,从而写出更高效、更健壮的代码。
2.简要集合结构图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
- 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。
- 集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。