# ArrayList
# ArrayList 的基本概述
之前我们学习过:要存储 1 名学员信息,我们就创建一个 Student 对象。
Student stu = new Student(“刘备”,22,“男”);
那么,如果我们想存储 100 名学员信息,就会面临以下问题:
Student stu1 = new Student(“刘备”,22,“男”);
Student stu2 = new Student(“冠寓”,25,“男”);
......
Studnet stu100 = new Student(“武松”,28,“男”);
要定义 100 个变量名!!
无法遍历,要找一个最大年龄的不好操作!!
这时候我们就需要一个:容器。
数组:缺点,长度固定!
Java 为我们提供了一个类:ArrayList——使用它时,没有长度限制!
示例代码:
import java.util.ArrayList;
/*
之前存储多个数据的时候使用数组去存储?
数组特点:一旦初始化(创建),长度就固定。
由于数组的具有长度固定的缺点,所以java这边提供一个不固定长度的类我们去使用ArrayList.
ArrayList也是一个存储数据的容器。而且也是可以存储多个数组的容器
*/
public class Demo1 {
public static void main(String[] args) {
//创建了一个长度为3的数组
// int[] arr = new int[3];
//上面数组最多可以存储3个数组,因为数组的长度已经固定了。
// arr[0] =11;
// arr[1] =22;
// arr[2] =33;
// arr[3] = 44;
//创建一个ArrayList
ArrayList list = new ArrayList();
//添加数组
list.add(11);
list.add(22);
list.add(33);
list.add(44);
list.add(55);
list.add(66);
list.add(77);
list.add(88);
list.add(99);
list.add(0);
System.out.println(list);
}
}
# ArrayList 的使用方式
构造方法:ArrayList():构造一个空的 ArrayList 集合
ArrayList list = new ArrayList();
# ArrayList 常用的方法
- public boolean add (E e) 将指定的元素追加到此集合的末尾 .【排队】
E是什么?当定义集合时,“泛型”是什么类型,这个E就是什么类型:
ArrayList<String> list = new ArrayList<>();//add()方法的参数就是String类型
- public void add (int index,E element) 在此集合中的指定位置插入指定的元素 【插队】
- public boolean remove (Object o) 删除指定的元素,返回删除是否成功。返回值:是否删除成功!
- public E remove (int index) 删除指定索引处的元素,返回被删除的元素。返回值:被删除的对象!
- public E set (int index,E element) 修改指定索引处的元素,返回被修改的元素
- public E get (int index) 返回指定索引处的元素
- public int size () 返回集合中的元素的个数
示例代码:
import java.util.ArrayList;
/*
1).public boolean add (E e) 将指定的元素追加到此集合的末尾 .【排队】
2).public void add (int index,E element) 在此集合中的指定位置插入指定的元素 【插队】
3).public boolean remove (Object o) 删除指定的元素,返回删除是否成功。返回值:是否删除成功!
4).public E remove (int index) 删除指定索引处的元素,返回被删除的元素。返回值:被删除的对象!
5).public E set (int index,E element) 修改指定索引处的元素,返回被修改的元素
6).public E get (int index) 返回指定索引处的元素
7).public int size () 返回集合中的元素的个数
*/
public class Demo1 {
public static void main(String[] args) {
//1. 创建ArrayList
ArrayList<String> list = new ArrayList<>(); //<String> 表示该集合对象只能添加String类型的数据
//添加元素
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
System.out.println("当前元素的内容:"+list); //[张三, 李四, 王五, 赵六]
//删除元素
boolean flag = list.remove("张三"); //删除成功返回ture,否则返回false
//根据索引删除
list.remove(0); //删除张三之后,李四就是索引值为0的元素
System.out.println("删除成功吗?"+flag);
System.out.println("删除之后元素的内容:"+list); //[张三, 李四, 王五, 赵六]
//根据索引修改指定位置的元素
list.set(0,"狗娃"); //王五修改为狗娃
System.out.println("修改之后元素的内容:"+list); //[张三, 李四, 王五, 赵六]
System.out.println("0号索引的元素:"+list.get(0)); //
System.out.println("集合的元素个数:"+ list.size());
}
}
# 遍历数组、集合、字符串方式的区别
import java.util.ArrayList;
/*
目标: 对比集合遍历方式、数组遍历方式,字符串的遍历方式。
*/
public class Demo3 {
public static void main(String[] args) {
//调用方法
// listPrint();
stringPrint();
}
//目前的方法并不是描述某一类事务的行为的时候,同学们可以添加static。如果你是描述某一类事物的行为的方法则不能添加static。比如:Student
public static void listPrint(){
//创建一个集合
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("张三"); //0
list.add("李四"); //1
list.add("王五"); //2
//遍历集合每一个元素,然后输出
for (int i = 0; i < list.size(); i++) {
String item = list.get(i);//根据索引值获取集合的元素
System.out.print(item+",");
}
}
//遍历数组 length
public static void arrayPrint(){
int[] arr = {98,87,24,56,78};
for (int i = 0; i < arr.length; i++) {
int item = arr[i];
System.out.print(item+",");
}
}
//遍历字符串
public static void stringPrint(){
String str = "我们班考试考出第一名!恭喜";
for (int i = 0; i <str.length(); i++) {
//指定索引值获取字符
char item = str.charAt(i);
System.out.print(item+",");
}
}
}
# ArrayList 集合练习
# 第一题
1).定义学生类,包含以下成员属性:
姓名、性别、年龄、分数
要求:私有成员属性、无参、全参构造方法、get/set 方法
2).定义 main()方法,初始化三名学员信息,并存储到 ArrayList 集合中
3).遍历集合,打印每名学员信息
Student 类
public class Student {
//姓名
private String name;
//年龄
private int age;
//性别
private String sex;
//分数
private double score;
//生成getter与setter、全参的构造方法 alt+insert
public Student() {
}
public Student(String name, int age, String sex, double score) {
this.name = name;
this.age = age;
this.sex = sex;
this.score = score;
}
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
StudentDemo
import java.util.ArrayList;
/*
1).定义学生类,包含以下成员属性:
姓名、性别、年龄、分数
要求:私有成员属性、无参、全参构造方法、get/set方法
2).定义main()方法,初始化三名学员信息,并存储到ArrayList集合中
3).遍历集合,打印每名学员信息
*/
public class Demo3 {
public static void main(String[] args) {
//1. 创建集合
ArrayList<Student> list = new ArrayList<>();
//2. 创建三个学生对象 ,创建对象需要看类的构造方法,因为创建对象需要使用到构造方法的。
Student s1 = new Student("狗娃",18,"男",98);
Student s2 = new Student("狗剩",19,"男",88);
Student s3 = new Student("铁蛋",20,"女",99);
//把学生对象存储到集合中
list.add(s1);
list.add(s2);
list.add(s3);
//3.遍历集合,打印每一位学员的信息
for (int i = 0; i <list.size() ; i++) {
//根据索引值取出学生
Student s = list.get(i);
System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge()+" 性别:"+s.getSex()+" 分数:"+s.getScore() );
}
}
}
# 第二题: 基于第一题基于控制台录入学员的信息
import java.util.ArrayList;
import java.util.Scanner;
/*
1).使用上题的“学生类”;
2).在main()方法中,通过控制台接收3名学员信息,并存储到ArrayList集合中;
3).遍历集合,打印每名学员信息
*/
public class Demo4 {
public static void main(String[] args) {
//1. 创建集合
ArrayList<Student> list = new ArrayList<>();
//2. 键盘录入三位学员的信息,然后存储到集合
Scanner sc = new Scanner(System.in);
//使用循环循环三次,录入三位学员的信息,每一次循环创建一个学生对象
for (int i = 0; i <3 ; i++) {
System.out.println("请输入姓名:");
String name = sc.next(); //接收名字保存name变量中
System.out.println("请输入性别:");
String sex = sc.next(); //接收性别保存sex变量中
System.out.println("请输入年龄:");
int age = sc.nextInt(); //接收年龄保存age变量中
System.out.println("请输入分数:");
double score = sc.nextDouble(); //接收一个小数保存到score变量中
//创建一个学生对象
Student s = new Student(name,age,sex,score);
//添加到集合中
list.add(s);
}
//3.遍历集合,打印每一位学员的信息
for (int i = 0; i <list.size() ; i++) {
//根据索引值取出学生
Student s = list.get(i);
System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge()+" 性别:"+s.getSex()+" 分数:"+s.getScore() );
}
}
}
# 第三题: 定义方法打印集合内容
import java.util.ArrayList;
import java.util.Scanner;
/*
1).使用上题的“学生类”;
2).在main()方法中,通过控制台接收3名学员信息,并存储到ArrayList集合中;
3).筛选出分数大于90分的学员,然后存储到新集合中并且打印新集合
*/
public class Demo5 {
public static void main(String[] args) {
//1. 创建集合
ArrayList<Student> list = new ArrayList<>();
//2. 键盘录入三位学员的信息,然后存储到集合
Scanner sc = new Scanner(System.in);
//使用循环循环三次,录入三位学员的信息,每一次循环创建一个学生对象
for (int i = 0; i <3 ; i++) {
System.out.println("请输入姓名:");
String name = sc.next(); //接收名字保存name变量中
System.out.println("请输入性别:");
String sex = sc.next(); //接收性别保存sex变量中
System.out.println("请输入年龄:");
int age = sc.nextInt(); //接收年龄保存age变量中
System.out.println("请输入分数:");
double score = sc.nextDouble(); //接收一个小数保存到score变量中
//创建一个学生对象
Student s = new Student(name,age,sex,score);
//添加到集合中
list.add(s);
}
//3).筛选出分数大于90分的学员,然后存储到新集合中并且打印新集合
ArrayList<Student> newList=new ArrayList<>();
for (int i = 0; i <list.size() ; i++) {
//取出每一位学员
Student s = list.get(i);
if(s.getScore()>=90){
//则需要把该学生添加到新集合中
newList.add(s);
}
}
//4. 遍历新集合
for (int i = 0; i <newList.size() ; i++) {
Student s = newList.get(i);
System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge()+" 性别:"+s.getSex()+" 分数:"+s.getScore() );
}
}
}