ArrayList集合
- 前言
- 一、数组回顾
- 二、ArrayList的简介
- 三.ArrayList常用方法;
- 四.ArrayList存储字符串并遍历
- 五.ArrayList存储学生对象并遍历
- 六.demo05ArrayList存储学生对象并遍历2
- 七.demo06ArrayList存储基本数据类型
前言
到目前为止,我们想存储多个数据,可以使用数组。而数组的长度是固定的,无法适应数据变化的需求。
为了解决这个问题,Java提供了另一个容器 java.util.ArrayList集合类,让我们可以更便捷的存储和操作数据。
ArrayList也是JDK提供的类,我们直接使用
一、数组回顾
数组格式:
动态初始化: 数据类型[] 数组名 = new 数据类型[长度]; int[] arr = new int[长度];
静态初始化: 数据类型[] 数组名 = new 数据类型[] {元素1, 元素2, 元素3}
数组访问:
获取数据: arr[索引]
修改数据: arr[索引] = 新的值;
获取长度: arr.length
举例:
int[] arr = new int[5];
int[] arr = new int[] {11, 22, 33};
String[] arr = new String[4];
数组的特点:
1.数组长度固定
2.数组即可以存储基本数据类型,也可以存储引用数据类型
二、ArrayList的简介
查API
1.看包
java.util
2.看类的说明
ArrayList也是一个容器可以存储多个数据,并且大小可以变化.
以后看到需求中需要数据添加或删除.建议使用ArrayList
3.看构造方法 ArrayList() 创建一个ArrayList默认容量为10
4.看成员方法
boolean add(Xxx x): 添加一个数据到ArrayList末尾
创建ArrayList的格式(重要):
类名 对象名 = new 类名();
ArrayList list = new ArrayList();
创建一个ArrayList对象,存储的数据类型是String
小结:
数组的特点: 是一个容器可以存储多个数据
1.长度固定
2.可以存储基本数据类型和引用数据类型
ArrayList集合: 是一个容器可以存储多个数据
1.ArrayList长度可以变化
代码:
public static void main(String[] args) {
String[] arr = new String[4];
arr[0] = "a";
arr[1] = "b";
arr[2] = "c";
arr[3] = "d";
// 创建一个ArrayList来存储String类型数据
ArrayList<String> list = new ArrayList<String>();
// 添加数据
// boolean add(Xxx x): 添加一个数据到ArrayList末尾
list.add("张三");
list.add("李四");
list.add("王五");
list.add("谢六");
System.out.println("list = " + list); // [张三,李四,王五,谢六]
// ArrayList内部做了特殊处理让我们打印的时候打印的是内容.(toString我们后面会介绍)
}
三.ArrayList常用方法;
遇到要保存多个数据,要添加,要删除.就使用ArrayList(常用)
增 查 删 改
增
boolean add(E e) 将指定的元素追加到此列表的末尾。
void add(int index, E element) 在此列表中的指定位置插入指定的元素。
查
E get(int index) 返回指定位置的元素。
删
E remove(int index) 删除该列表中指定位置的元素。
boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
改
E set(int index, E element) 用指定的元素替换此列表中指定位置的元素。
获取元素的个数:
int size() 返回此列表中的元素数。
public static void main(String[] args) {
// JDK7以后右边<>里面可以省略
ArrayList<String> list = new ArrayList<>();
// 增
// boolean add(E e) 将指定的元素追加到此列表的末尾。
list.add("张三");
list.add("李四");
list.add("王五");
// 0 1 2
System.out.println("list = " + list); // [张三,李四,王五]
// void add(int index, E element) 在此列表中的指定位置插入指定的元素。
list.add(1, "谢六");
// 0 1 2 3
System.out.println("list = " + list); // [张三,谢六,李四,王五]
// 查: E get(int index) 返回指定位置的元素。
String s1 = list.get(1);
System.out.println("get: " + s1); // get: 谢六
// 删
// 1.E remove(int index) 删除该列表中指定位置的元素
System.out.println("remove1: " + list.remove(0)); // remove1: 张三
System.out.println("list = " + list); // list = [谢六,李四,王五]
// 2.boolean remove(Object o) 根据内容删除第一个出现的数据
list.add("谢六");
System.out.println("list = " + list); // list = [谢六,李四,王五,谢六]
list.remove("谢六"); // 0 1 2
System.out.println("list = " + list); // list = [李四,王五,谢六]
// 改 E set(int index, E element) 修改指定索引位置的数据
String set = list.set(1, "周");
System.out.println("set = " + set); // set = 王五 返回被修改的数据
System.out.println("list = " + list); // list = [李四,周,谢六]
// 获取元素的个数: int size() 返回此列表中的元素数。
System.out.println(list.size()); // 3
list.add("羊");
System.out.println(list.size()); // 4
}
四.ArrayList存储字符串并遍历
import java.util.ArrayList;
import java.util.Collections;
案例需求
创建一个存储字符串的ArrayList集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
小结:
ArrayList遍历固定格式
for (int i = 0; i < list.size(); i++) { // i = 0, 1, 2
System.out.println(list.get(i));
}
代码:
public static void main(String[] args) {
// 1.创建ArrayList集合
ArrayList<String> list = new ArrayList<String>();
// 2.往ArrayList中添加3个字符串数据
list.add("aaa"); // 0
list.add("bbb"); // 1
list.add("ccc"); // 2
// 3.遍历ArrayList集合获取每个数据,进行打印
/*
System.out.println(list.get(0)); // aaa
System.out.println(list.get(1)); // bbb
System.out.println(list.get(2)); // ccc*/
// 以上代码是重复代码,只有索引在变化.改成循环.次数确定使用for循环遍历
for (int i = 0; i < list.size(); i++) { // i = 0, 1, 2
System.out.println(list.get(i));
}
// list.fori: 神操作
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
五.ArrayList存储学生对象并遍历
需求:
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
分析:
1.定义学生类
2.创建3个学生对象
3.创建ArrayList集合,用于存储学生数据
4.添加学生到ArrayList集合中
5.遍历ArrayList集合.得到每个学生
小结:
1.对象new出来在堆中. Student s1保存的是对象的地址
2.stus.add(s1); 将对象添加到集合中,实际添加的是对象的地址
3.ArrayList取出来也是对象的地址,使用Student类型的变量保存
代码:
1.自行定义学生类
2
public static void main(String[] args) {
// 2.创建3个学生对象
Student s1 = new Student("A", 56); // Student s1 = 7a5d012c;
Student s2 = new Student("B", 45); // Student s2 = 3fb6a447;
Student s3 = new Student("C", 46); // Student s3 = 79b4d0f;
System.out.println("s1 = " + s1); // 7a5d012c;
System.out.println("s2 = " + s2); // 3fb6a447;
System.out.println("s3 = " + s3); // 79b4d0f;
// 3.创建ArrayList集合,用于存储学生数据
ArrayList<Student> stus = new ArrayList<>();
// 4.添加学生到ArrayList集合中
stus.add(s1); // 加进去的是什么? 7a5d012c
stus.add(s2); // 3fb6a447
stus.add(s3); // 79b4d0f
//
// System.out.println("stus = " + stus);
// 5.遍历ArrayList集合.得到每个学生
for (int i = 0; i < stus.size(); i++) {
// System.out.println(stus.get(i)); // 7a5d012c
Student s = stus.get(i); // i = 0 (7a5d012c) i = 1 (3fb6a447) i = 2 (79b4d0f)
System.out.println(s.getName() + "----" + s.getAge());
}
}
六.demo05ArrayList存储学生对象并遍历2
需求:
创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入
分析:
1.定义学生类
2.创建ArrayList集合,用于存储学生数据
3.定义一个方法让用户输入数据,并创建学生添加到集合中
4.遍历ArrayList集合.得到每个学生
代码:
public static void main(String[] args) {
// 2.创建ArrayList集合,用于存储学生数据
ArrayList<Student> list = new ArrayList<>();
// 调用方法添加一个学生
addStudent(list);
addStudent(list);
addStudent(list);
// 4.遍历ArrayList集合.得到每个学生
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "--" + stu.getAge());
}
}
// 3.定义一个方法让用户输入数据,并创建学生添加到集合中
// 明确返回值类型: 不需要返回值: void
// 明确参数列表: 创建的学生往哪个集合中添加: 参数列表: ArrayList集合
public static void addStudent(ArrayList<Student> stus) {
// stus = list,就是外部传入的集合
// 让用户输入学生的姓名和年龄
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的姓名:");
String name = sc.next();
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
// 创建学生对象
Student s = new Student(name, age);
// 将学生对象添加到集合中
stus.add(s);
}
七.demo06ArrayList存储基本数据类型
ArrayList只能存储引用数据类型.不能存储基本数据类型.
Java为每种基本数据类型都搞了一个对应的引用数据类型
基本数据类型 对应的引用数据类型(包装类)
byte Byte
short Short
int Integer *****
long Long
float Float
double Double
char Character *****
boolean Boolean
我们ArrayList中要保存基本数据类型,需要写对应的引用数据类型
小结:
ArrayList不能存储基本数据类型,只能存储引用数据类型.如果要存储基本数据类型的数据.需要写包装类
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(110); // 0
list.add(119); // 1
list.add(120); // 2
list.add(122); // 3
list.remove(1);
int sum = 0;
// 遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
sum += list.get(i);
}
System.out.println("sum = " + sum);
}