- ArrayList
- 一、集合概述
- 二.ArrayList集合
- 1.ArrayList集合的对象获取
- 2.ArrayList集合的对象获取
- 三、ArrayList对于泛型的支持
- 1.泛型概述
- 2.怎么去统一ArrayList集合操作的元素类型?
- 四、ArrayList常用方法、遍历
- 1.ArrayList集合常用方法
- 五、ArrayList集合案例:遍历并删除元素
- 案例:遍历并删除元素值
- 六、ArrayList集合案例:存储自定义类型的对象
- 案例:影片信息在程序中显示
- 七、ArrayList集合案例:元素搜索
- 案例:学生信息系统的数据搜索
ArrayList 一、集合概述
集合是与数组类似,也是一种容器,用于装数据的。
数组的特点:
数据定义完成并启动后,类型确定、长度固定。
问题:在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的
集合的特点:
集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。 集合非常适合做元素个数不确定,且要进行增删操作的业务场景。 集合提供了许多丰富、好用的功能,而数组的功能单一。
二.ArrayList集合ArrayList是集合中的一种,它支持索引。
1.ArrayList集合的对象获取| 构造器 | 说明 |
|---|---|
| public ArrayList() | 创建一个空的集合对象 |
| 方法名 | 说明 |
|---|---|
| public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
| public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
代码如下(示例):
public class ArraListDemo1 {
public static void main(String[] args) {
//创建ArrayList集合对象
ArrayList list =new ArrayList();
//2、添加数据
list.add("java");
list.add("java");
list.add("MySQL");
list.add("张三");
list.add("23");
list.add("23.5");
list.add(false);
list.add('中');
System.out.println(list);
//3.给指定索引位置插入元素
list.add(1,"赵敏");
System.out.println(list);
}
}
三、ArrayList对于泛型的支持 1.泛型概述运行结果:
[java, java, MySQL, 张三, 23, 23.5, false, 中]
[java, 赵敏, java, MySQL, 张三, 23, 23.5, false, 中]
ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
举例:
ArrayList :此集合只能操作字符串类型的元素。
ArrayList:此集合只能操作整数类型的元素。
注意:集合中只能存储引用类型,不支持基本数据类型。
泛型约束ArrayList集合的数据操作举例:
public class ArraListDemo2 {
public static void main(String[] args) {
//ArrayList list=new ArrayList();
ArrayList list=new ArrayList<>();//JDK1.7开始,泛型后面的类型声明可以不写
list.add("java");
list.add("MySQL");
ArrayList list1=new ArrayList<>();
list1.add(23);
list1.add(100);
}
}
2.怎么去统一ArrayList集合操作的元素类型?
●使用泛型:<数据类型>
ArrayList四、ArrayList常用方法、遍历 1.ArrayList集合常用方法list1 = new ArrayList();
| 方法名称 | 说明 |
|---|---|
| public E get(int index) | 返回指定索引处的元素 |
| public int size() | 删除指定索引处的元素,返回被删除的元素 |
| public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
| public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
代码如下(示例):
public class ArrayListDemo3 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add( "Java" );
list.add( "Java");
list.add("MySQL");
list.add("MyBatis");
list.add("HTML");
// 1、public E get(int index):获取某个索引位置处的元素值list..
String e=list.get(3);
System.out.println(e);//MyBatis
//2、public int size():获取集合的大小(元素个数>
System.out.println(list.size());//5
//3、完成集合的遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}//Java
//Java
//MySQL
//MyBatis
//HTML
// 4、public E remove(int index):删除某个索引位置处的元素值,并返回被删除的元素值
System.out.println(list);//[Java, Java, MySQL, MyBatis, HTML]
String e2=list.remove(2);
System.out.println(e2);//MySQL
System.out.println(list);//[Java, Java, MyBatis, HTML]
// 5、public boolean remove(Object o):直接剔除元素值,剔除成功返回true,删除失败返回false
System.out.println(list.remove("MyBatis"));//true
System.out.println(list);//[Java, Java, HTML]
ArrayList list1=new ArrayList<>();
list1.add("Java");
list1.add("张三");
list1.add("Java");
list1.add("MySQL");
System.out.println(list1);//[Java, 张三, Java, MySQL]
//只会删除第一次出现的这个元素值,后面的不删除
System.out.println(list1.remove("Java"));//true
System.out.println(list1);//[张三, Java, MySQL]
// 6、public E set(int index,E element):修改某个索引位置处的元素值。
String e3=list1.set(0, "贾乃亮");
System.out.println(e3);//张三
System.out.println(list1);//[贾乃亮, Java, MySQL]
}
}
五、ArrayList集合案例:遍历并删除元素
案例:遍历并删除元素值
需求:
- 某个班级的考试在系统上进行,成绩大致为: 98,77,66,89,79,50,100
- 现在需要先把成绩低于80分以下的数据去掉。
分析:
- 定义ArrayList集合存储多名学员的成绩。
- 遍历集合每个元素,如果元素值低于80分,去掉它。
代码如下(示例):
public class ArrayListTest1 {
public static void main(String[] args) {
//目标:学习遍历并删除元素的正确方案。
//1、创建一个ArrayList集合存储一个班级学生的成绩
ArrayList scores = new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(79);
scores.add(50);
scores.add(100);
System.out.println(scores);
//2、把低于80分的成绩从集合中去掉。
// scores = [98,77,66,89,79,50,100]
//
// 0 1 2 3 4 5 6
// for (int i =0; i < scores.size(); i++) {
// int score = scores.get(i);
// if(score < 80){
// //这个分数必须删除
// scores.remove(i);
// }
// }
// System.out.println(scores);//[98, 66, 89, 50, 100]
//完美的方案之一
// for (int i =0; i < scores.size(); i++) {
// int score = scores.get(i);
// if(score < 80){
// //这个分数必须删除
// scores.remove(i);
// i--;
// }
// }
// System.out.println(scores);//[98, 89, 100]
//方案二 从后面倒着遍历再删除
for (int i =scores.size() - 1; i >=0 ; i--) {
int score=scores.get(i);
if (score<80){
scores.remove(i);
}
}
System.out.println(scores);//[98, 89, 100]
}
}
六、ArrayList集合案例:存储自定义类型的对象
案例:影片信息在程序中显示
需求
某影院系统需要在后台存储上述三部电影,然后依次展示出来。
分析
1︰定义一个电影类,定义一个集合存储电影对象。
2︰创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
代码如下(示例):
public class Movie {
public String name;
private double score;
private String actor;
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
public Movie() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
public class ArrayListTest2 {
public static void main(String[] args) {
//目标:理解ArrayList集合存储自定义类型的对象。
//1、定义电影类。
//2、创建三个电影对象
Movie m1=new Movie("《肖生克的救赎》",9.7,"罗宾斯");
Movie m2=new Movie("《霸王别姬》",9.6,"张因荣、张丰毅");
Movie m3=new Movie("《阿甘正传》",9.5,"汤姆、汉克斯");
//3、创建一个电影类型的ArrayList集合,存储三部电影对象
ArrayList movies=new ArrayList<>();
movies.add(m1);
movies.add(m2);
movies.add(m3);
System.out.println(movies);
//遍历电影类型中的每个电影对象,访问它的信息即可
for (int i = 0; i < movies.size(); i++) {
Movie m=movies.get(i);
System.out.println("电影名称"+m.getName());
System.out.println("电影得分"+m.getScore());
System.out.println("电影主演"+m.getActor());
System.out.println("----------------");
}
}
}
七、ArrayList集合案例:元素搜索
案例:学生信息系统的数据搜索
需求
·后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
分析
- 定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。
- 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
- 使用死循环,让用户可以不停的搜索。
public class Student {
private String stutyNumber;
private String name;
private int age;
private String className;
public Student() {
}
public String getStutyNumber() {
return stutyNumber;
}
public void setStutyNumber(String stutyNumber) {
this.stutyNumber = stutyNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Student(String stutyNumber, String name, int age, String className) {
this.stutyNumber = stutyNumber;
this.name = name;
this.age = age;
this.className = className;
}
}
public class ArrayListTest3 {
public static void main(String[] args) {
//1、定义学生类
//2、创建集合存储学生对象,创建学生对象封装学生信息。
//把学生对象添加到集合中去。
ArrayListstudents=new ArrayList<>() ;
students.add(new Student("20180302","叶孤城",23,"护理一班"));
students.add(new Student("20180303","东方不败",23,"推拿二班"));
students.add(new Student("20180304","西门吹雪",26,"中药学四班"));
students.add(new Student("20180305","梅超风",26,"神经科2班"));
//3、遍历这些学生信息展示
System.out.println("学号tt名称tt年龄tt班级");
for (int i = 0; i < students.size(); i++) {
Student s=students.get(i);
System.out.println(s.getStutyNumber()+"t"+s.getName()+"t"+s.getAge()+"t"+s.getClassName());
}
//4、定义方法完成按照学号的搜索功能
Scanner sc=new Scanner(System.in);
while (true){
System.out.println("请您输入学号查询学生对象");
String studyNumber =sc.next();
//调用方法查询
Student s= getStudentById(students, studyNumber);
//6、判断s中是否存在学生对象
if(s==null){
System.out.println("对不起,查无此人");
}else {
System.out.println("您查询的学生信息如下:");
System.out.println(s.getStutyNumber()+"t"+s.getName()+"t"+s.getAge()+"t"+s.getClassName());
}
}
}
public static Student getStudentById(ArrayList students,String studyNumber){
//1、遍历全部学生对象
for (int i = 0; i < students.size(); i++) {
Student s=students.get(i);
//2、询问当前遍历的这个学生对象的学号,是否是我们要找的学号
if(s.getStutyNumber().equals(studyNumber)){
//这个s代表的学生对象就是我们要找的:返回它
return s;
}
}
//查无此人
return null;
}
}



