【Java百炼成神】大魂师进阶篇——ArrayList、LinkedList、Vector、HashSet

简介: 【Java百炼成神】大魂师进阶篇——ArrayList、LinkedList、Vector、HashSet

ArrayList


ArrayList简介


ArrayList 是开发中最常用的集合

该集合因为使用索引,查找速度极快。

用于进行数据存储和数据的获取、遍历

image.png

练习:

1、定义集合存放多个整数,打印集合中所有整数的和,最大值,最小值。

2、定义集合,存储多个员工(包含姓名、月工资),计算公司一个月所有员

工工资的总支出。


增强for循环


实际开发中,由于迭代器操作繁琐,所以最常使用的是 foreach 循环(又叫增强 for 循环)来完成元素的

获取,增强 for 循环是完成集合迭代的简化方式。


//增强 for 循环格式如下: 
for(元素数据类型 变量:容器 or 数组) { 
 //循环体,变量中存放内容就相当于 it.next()获得内容 
}

微信图片_20220529232356.png

并发修改异常


尝试完成以下练习:

定义集合存储 4 个字符串分别为:”abc1”, ”abc2”, ”abc3”, ”abc4”,使用增强 for 遍历集合,获取每一个

元素,判断如果包含”abc2”这个元素,则添加一个元素”czxy”

有部分同学会出现代码异常:微信图片_20220529232403.png

这是就是并发修改异常。

并发就是同时的意思,好比是一个小门,一个人进门一个人出门,那么他们进出门的行为就是同时进

行,我们称为并发。


出现原因:

迭代过程中并发修改异常的原因为迭代器中”记忆”的集合长度与集合中实际长度不同,而导致出现索

引与实际元素不符甚至无限循环的情况发生。

所以在使用增强 for 时,我们要尽量避免在遍历过程中为集合添加/删除数据,


解决方案:

普通 for: 遍历时,可以进行添加/删除操作。

增强 for: 仅仅做遍历,不会在遍历中 添加/删除 集合元素


练习:

集合中存储多个 Person(姓名、年龄、性别、描述)对象,将集合中年龄大于 80 岁的 Person 对象

删除。


LinkedList


LinkedList 叫做链表:微信图片_20220529232411.png

LinkedList 与 ArrayList 的创建方式相似:微信图片_20220529233126.png

但 API 方法却完全不同:

image.png微信图片_20220529232422.png

注意:

虽然 LinkedList 可以像 ArrayList 那样通过索引来获取/删除元素:

例如:get(索引)/remove(索引) 微信图片_20220529232436.png

总结:

需要一次性保存大量数据,经常进行索引遍历数据,推荐使用 ArrayList

需要进行数据频繁的追加和删除,极少使用索引遍历数据,推荐使用 LinkedList


练习:

1、公司新闻公告,需要频繁滚动新闻(添加新新闻,但每次只展示前 4 条新

闻)。请选择合适的集合,存储新闻(String 信息),并打印前 4 条。

2、定义 LinkedList 集合,存储多个员工 Employee(包含姓名、工资),

该集合我们就可以理解为一个公司。

集合中有如下数据:

张三,10000

李四,9000

王五,8000

现在要在张三前面添加一个员工:牛二,15000

开除最后一个员工:王五

操作完成后,计算该公司一个月所有员工工资的总支出。


Vector简介


Vector:我们可以将其理解为版本旧的、安全的、效率低的 ArrayList,Vector 中提供了一个独特的取

出方式,返回 Enumeration。此接口 Enumeration 的功能与 Iterator 接口的功能是类似的。

 image.png微信图片_20220529233508.png

微信图片_20220529233534.png

HashSet


HashSet 集合不能存放重复元素。

如:

居民身份证号、商品货号等。

 

注:

HashSet 集合无索引。

HashSet 集合迭代元素的顺序与存储元素的顺序无关

常用方法:

image.png

因为无索引,所以 HashSet 无通过索引单独获取某个元素的常规方法微信图片_20220529232453.png

练习:

1、定义一个整数数组

int[] arr = {11,22,33,44,55,33,22,11};

使用 HashSet 集合取出数组中重复的数字,并将重复数字保存到一个

ArrayList 集合中。

相关文章
|
1天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
12 0
|
1天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
1天前
|
安全 Java 数据安全/隐私保护
【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解
【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解
|
1天前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
|
1天前
|
SQL Java
【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
|
1天前
|
Java 关系型数据库 MySQL
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
|
1天前
|
JSON 前端开发 Java
【JAVA进阶篇教学】第七篇:Spring中常用注解
【JAVA进阶篇教学】第七篇:Spring中常用注解
|
1天前
|
安全 Java
【JAVA进阶篇教学】第六篇:Java线程中状态
【JAVA进阶篇教学】第六篇:Java线程中状态
|
1天前
|
缓存 Java
【JAVA进阶篇教学】第五篇:Java多线程编程
【JAVA进阶篇教学】第五篇:Java多线程编程
|
1天前
|
Java
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
【JAVA进阶篇教学】第四篇:JDK8中函数式接口