集合的体系和特点
集合是一个大小可变的容器。
集合中的每一个数据称为元素。
集合的特点是类型不确定,大小不固定。集合有很多种,不同的集合特点和使用场景不同。
数组一旦定义出来,类型和长度就固定了。
在开发中,很多时候元素的个数不确定。而且经常进行元素的增删改查操作,集合非常合适。
java 中集合的代表是Collection。Collection集合是java 中集合的祖宗类。
Collection集合体系
Collection接口
Set接口 List接口
HashSet实现类 TreeSet实现类 ArrayList实现类 LinkedList实现类
LinkedHashSet实现类
Set系列集合:添加的元素是无序,不重复,无索引的。
- HashSet添加的元素是无序,不重复,无索引的。
- LinkedHashSet添加的元素是有序,不重复,无索引的。
- TreeSet添加的元素是按照大小默认升序排序。
List系列集合:添加的元素是有序,不重复,有索引的。
- ArrayList 同上
- LinkedList 同上
集合常用API
add 添加一个元素
remove 移除一个元素
clear 清空集合
contains 是否包含某个元素
isEmpty 集合是否为空
size 集合大小,元素个数
toArray 转换成数组
String[]arrs1 =list1.toArray(String[]::new)(制定转换的数组类型)
addAll 添加一个集合中的所有元素
c1.addAll(c2)将集合c2整个添加到c1中。
ArrayList底层基于数组数据结构,查询快,增删慢。
因为list集合有索引,所以有许多按照索引操作元素的功能。
add(int index,E element)制定索引插入元素
get(int index)
remove(int index)
set (int index,E element)
LinkedList底层基于双链表数据结构,查询慢,增删快。首尾元素操作最快。
所以有许多操作首尾元素的特殊功能。
addLast()入队➕removeFirst()出队 适合排队模型
push()入(压)栈➕pop()出(弹)栈 适合堆模型
addFirst其实与push相同
removeFist其实与pop相同
所以如果查询多用ArrayList,首尾操作多用LinkedList。
set系列集合底层基于哈希表存储的,它的增删改查性能都很好,如果不在无序不重复可以使用。
jdk1.8以后 哈希表=数组➕链表➕红黑树➕哈希算法,当链表长度超过阀值8时,将链表转换成红黑树,这样大大减少了查询时间。
LinkedHashSet是HashSet的子类,底层依然基于哈希表存储,但是每个元素都额外带一个链来维护添加顺序。不光增删改查快,还有序。缺点多一个存储顺序的链会占内存空间。
所以,无序不重复场景用HashSet,有序不重复场景用LinkedHashSet。
TreeSet:不重复,无索引,按照元素大小排序。
自排序方式:
1.有值特性的元素直接可以升序排序(整型,浮点型)
2.字符串按照首字符的编号排序
3.对于自定义的引用数据类型,无法排序,直接执行则报错。需要制定比较规则。比如为对象类实现comparable比较器 接口,重写比较方法。
Collections工具类
Collections.addAll()为某个集合添加多个元素。
Collections.shuffle()打乱某个集合的顺序。只能打乱有序的List集合。
Collections.sort()为List集合升序排序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix