【Java百炼成神】大魂师进阶篇——ArrayList、LinkedList、Vector、HashSet
- 💂 个人主页: 陶然同学
- 🤟 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
- 💅 想寻找共同成长的小伙伴,请点击【Java全栈开发社区】
- 💬推荐一款模拟面试、刷题神器👉点击跳转此网站
目录
ArrayList
ArrayList简介
ArrayList 是开发中最常用的集合。
该集合因为使用索引,查找速度极快。
用于进行数据存储和数据的获取、遍历
方法签名 | 描述 |
boolean add(元素类型 e) | 向集合添加元素 |
boolean add(int index,元素类型 e) | 向指定索引位置添加元素, 该索引 原来元素向后依次推移 注意:该索引必须存在,否则报错 元素越多,添加越慢 |
int size() | 获取集合长度 |
元素类型 get(int index) | 根据指定索引获取集合元素,索引号从 0 开始。 |
元素类型 remove(int index) | 删除某个索引的元素 元素越多,删除越慢 |
练习:
1、定义集合存放多个整数,打印集合中所有整数的和,最大值,最小值。
2、定义集合,存储多个员工(包含姓名、月工资),计算公司一个月所有员
工工资的总支出。
增强for循环
实际开发中,由于迭代器操作繁琐,所以最常使用的是 foreach 循环(又叫增强 for 循环)来完成元素的
获取,增强 for 循环是完成集合迭代的简化方式。
//增强 for 循环格式如下:
for(元素数据类型 变量:容器 or 数组) {
//循环体,变量中存放内容就相当于 it.next()获得内容
}
并发修改异常
尝试完成以下练习:
定义集合存储 4 个字符串分别为:”abc1”, ”abc2”, ”abc3”, ”abc4”,使用增强 for 遍历集合,获取每一个
元素,判断如果包含”abc2”这个元素,则添加一个元素”czxy”
有部分同学会出现代码异常:
这是就是并发修改异常。
并发就是同时的意思,好比是一个小门,一个人进门一个人出门,那么他们进出门的行为就是同时进
行,我们称为并发。
出现原因:
迭代过程中并发修改异常的原因为迭代器中”记忆”的集合长度与集合中实际长度不同,而导致出现索
引与实际元素不符甚至无限循环的情况发生。
所以在使用增强 for 时,我们要尽量避免在遍历过程中为集合添加/删除数据,
解决方案:
普通 for: 遍历时,可以进行添加/删除操作。
增强 for: 仅仅做遍历,不会在遍历中 添加/删除 集合元素
练习:
集合中存储多个 Person(姓名、年龄、性别、描述)对象,将集合中年龄大于 80 岁的 Person 对象
删除。
LinkedList
LinkedList 叫做链表:
LinkedList 与 ArrayList 的创建方式相似:
但 API 方法却完全不同:
方法名 | 描述 |
void addFirst(E e) | 向链表的开头插入一个元素,相当于 list.add(0 , e) |
void addLast(E e) | 向链表的尾部插入一个元素,相当于 list.add( list.size() , e ) |
E getFirst() | 从链表中获得第一个元素 |
E getLast() | 从链表中获得最后一个元素 |
E removeFirst() | 移除链表中的第一个元素,并返回移除的元素 |
E removeLast() | 移除链表中的最后一个元素,并返回移除的元素 |
注意:
虽然 LinkedList 可以像 ArrayList 那样通过索引来获取/删除元素:
例如:get(索引)/remove(索引)
但 LinkedList 中这两个索引操作的方法严禁使用,因为效率极低
总结:
需要一次性保存大量数据,经常进行索引遍历数据,推荐使用 ArrayList
需要进行数据频繁的追加和删除,极少使用索引遍历数据,推荐使用 LinkedList
练习:
1、公司新闻公告,需要频繁滚动新闻(添加新新闻,但每次只展示前 4 条新
闻)。请选择合适的集合,存储新闻(String 信息),并打印前 4 条。
2、定义 LinkedList 集合,存储多个员工 Employee(包含姓名、工资),
该集合我们就可以理解为一个公司。
集合中有如下数据:
张三,10000
李四,9000
王五,8000
现在要在张三前面添加一个员工:牛二,15000
开除最后一个员工:王五
操作完成后,计算该公司一个月所有员工工资的总支出。
Vector简介
Vector:我们可以将其理解为版本旧的、安全的、效率低的 ArrayList,Vector 中提供了一个独特的取
出方式,返回 Enumeration。此接口 Enumeration 的功能与 Iterator 接口的功能是类似的。
Vector 的方法名 | 描述 |
void addElement(E e) | 添加元素,相当于 list.add(…) |
Enumeration<E> elements() |
获得遍历对象 Enumeration,相当于迭代器 Iterator |
Enumeration 的方法名 | 描述 |
boolean hasMoreElements() | 判断是否有下一个元素,相当于 it.hasNext() |
E nextElement() | 获得下一个元素,相当于 it.next() |
HashSet
HashSet 集合不能存放重复元素。
如:
居民身份证号、商品货号等。
注:
HashSet 集合无索引。
HashSet 集合迭代元素的顺序与存储元素的顺序无关
常用方法:
方法名 | 描述 |
int size() | 返回集合中元素的个数 |
boolean isEmpty() | 判断集合是否为空 |
boolean add(E e) | 向集合中添加元素 |
boolean remove(Object o) | 将指定对象从集合中移除 |
void clear() | 清空集合中所有成员 |
因为无索引,所以 HashSet 无通过索引单独获取某个元素的常规方法
练习:
1、定义一个整数数组
int[] arr = {11,22,33,44,55,33,22,11};
使用 HashSet 集合取出数组中重复的数字,并将重复数字保存到一个
ArrayList 集合中。
结束语🏆🏆🏆
🔥推荐一款模拟面试、刷题神器网站
1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
3、大厂笔试真题:字节跳动、美团、百度、腾讯…
文章来源: blog.csdn.net,作者:陶然同学,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_45481821/article/details/124107685
- 点赞
- 收藏
- 关注作者
评论(0)