目录
一、集合和数组
- 集合和数组的区别
- 共同点:都是存储数据的容器
- 不同点:数组的容量是固定的,集合的容量是可变的
- 集合类的特点:提供一种存储空间可变的存储模型,存储的数据容器是可以发生改变的
- 考虑下列的案例实现
- 如果后续需要增加学生,如增加第4个学生,由于数组大小不可改变,我们必须修改代码
Student[] arr = new Student[4];
来存放第4个新增的学生;后续再新增学生,我们都需要修改源码才可以满足需求 - 试想是否有没有可以不修改源码的方法来实现添加学生呢?
import com.heima.domain.Student;
public class TestObjectArray {
public static void main(String[] args) {
Student[] arr = new Student[3];
Student stu1 = new Student("张三",23);
Student stu2 = new Student("李四",24);
Student stu3 = new Student("王五",25);
arr[0] = stu1;
arr[1] = stu2;
arr[2] = stu3;
for (int i = 0; i < arr.length; i++) {
Student temp = arr[i];
System.out.println(temp.getName() + "..." + temp.getAge());
}
}
}
二、ArrayList的构造方法和添加方法
public ArrayList() | 创建一个空的集合对象 |
---|
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
import java.util.ArrayList;
public class Demo1ArrayList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
list.add(0,"666");
System.out.println(list);
}
}
三、ArrayList常用成员方法
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;
public class Demo2ArrayList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
String s1 = list.get(0);
String s2 = list.get(1);
String s3 = list.get(2);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
int size = list.size();
System.out.println(size);
}
public static void testSet() {
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
String s = list.set(0,"666");
System.out.println(s);
System.out.println(list);
}
public static void testRemove() {
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
boolean b1 = list.remove("abc");
boolean b2 = list.remove("zzz");
System.out.println(b1);
System.out.println(b2);
System.out.println(list);
String s = list.remove(0);
System.out.println(s);
System.out.println(list);
}
}
四、ArrayList的遍历
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
}
}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Test2 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student stu1 = new Student("张三1",23);
Student stu2 = new Student("张三2",23);
Student stu3 = new Student("张三3",23);
list.add(stu1);
list.add(stu2);
list.add(stu3);
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student stu1 = getStudent();
Student stu2 = getStudent();
Student stu3 = getStudent();
list.add(stu1);
list.add(stu2);
list.add(stu3);
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
public static Student getStudent() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
Student stu = new Student(name, age);
return stu;
}
}
五、案例:集合删除元素
- 需求:创建一个存储String的集合,内部存储(test,张三,李四,test,test)字符串,删除所有的test字符串,删除后,将集合剩余元素打印在控制台
- list.remove(“test”):根据元素进行删除, 只能删除集合中的第一个元素
import java.util.ArrayList;
public class Test4 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("张三");
list.add("李四");
list.add("test");
list.add("test");
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if("test".equals(s)){
list.remove(i);
i--;
}
}
System.out.println(list);
}
}
六、案例:集合元素筛选
- 需求:定义一个方法,方法接收一个集合对象(泛型为Student),方法内部将年龄低于18的学生对象找出,并存入新集合对象,方法返回新集合。
import java.util.ArrayList;
public class Test5 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student stu1 = new Student("张三1",10);
Student stu2 = new Student("张三2",10);
Student stu3 = new Student("张三3",20);
list.add(stu1);
list.add(stu2);
list.add(stu3);
ArrayList<Student> newList = getList(list);
for (int i = 0; i < newList.size(); i++) {
Student stu = newList.get(i);
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
public static ArrayList<Student> getList(ArrayList<Student> list) {
ArrayList<Student> newList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
int age = stu.getAge();
if (age < 18) {
newList.add(stu);
}
}
return newList;
}
}