0
点赞
收藏
分享

微信扫一扫

第四章_集合基础(1)_ArrayList

简单聊育儿 2022-04-05 阅读 18
java

目录

一、集合和数组

  • 集合和数组的区别
    • 共同点:都是存储数据的容器
    • 不同点:数组的容量是固定的,集合的容量是可变的
  • 集合类的特点:提供一种存储空间可变的存储模型,存储的数据容器是可以发生改变的
  • 考虑下列的案例实现
    • 如果后续需要增加学生,如增加第4个学生,由于数组大小不可改变,我们必须修改代码Student[] arr = new Student[4];来存放第4个新增的学生;后续再新增学生,我们都需要修改源码才可以满足需求
    • 试想是否有没有可以不修改源码的方法来实现添加学生呢?
import com.heima.domain.Student;

public class TestObjectArray {
    /*
        需求:将(张三,23)(李四,24)(王五,25)
            封装为3个学生对象并存入数组
            随后遍历数组,将学生信息输出在控制台
     */
    public static void main(String[] args) {
        // 2. 动态初始化长度为3的数组,类型为Student类型
        Student[] arr = new Student[3];
        // 3. 根据需求创建3个学生对象
        Student stu1 = new Student("张三",23);
        Student stu2 = new Student("李四",24);
        Student stu3 = new Student("王五",25);
        // 4. 将学生对象存入数组
        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;
        // 5. 遍历数组,取出每一个学生对象
        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 {
    /*
        注意:
                集合容器如果没有加入<> ,ArrayList list = new ArrayList<>();就可以存储任意数据类型
                <> 泛型: 对集合容器存储的数据类型进行限制
     */
    public static void main(String[] args) {
        // 1. 创建集合容器对象
        ArrayList<String> list = new ArrayList<>();
        // 2. 调用对象的add方法, 向容器中添加数据
        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");
        // public E get(int index) 返回指定索引处的元素
        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);
        // public int size() 返回集合中的元素的个数
        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");
        //  public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
        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");
        //  public boolean remove(Object o) 删除指定的元素,返回删除是否成功
        boolean b1 = list.remove("abc");
        boolean b2 = list.remove("zzz");
        System.out.println(b1);
        System.out.println(b2);
        System.out.println(list);
        // public E remove(int index)  删除指定索引处的元素,返回被删除的元素
        String s = list.remove(0);
        System.out.println(s);
        System.out.println(list);
    }
}

四、ArrayList的遍历

  • 集合存储字符串并遍历
import java.util.ArrayList;

public class Test1 {
    /*
        需求:创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
     */
    public static void main(String[] args) {
        // 1. 创建集合对象
        ArrayList<String> list = new ArrayList<>();
        // 2. 往集合中添加字符串对象
        list.add("张三");
        list.add("李四");
        list.add("王五");
        // 3. 遍历集合
        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;
    }
	//GET...SET...省略
}
public class Test2 {
    /*
        需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
     */
    public static void main(String[] args) {
        // 2. 创建集合对象
        ArrayList<Student> list = new ArrayList<>();
        // 3. 创建学生对象
        Student stu1 = new Student("张三1",23);
        Student stu2 = new Student("张三2",23);
        Student stu3 = new Student("张三3",23);
        // 4. 添加学生对象到集合中
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        // 5. 遍历集合,采用通用遍历格式实现
        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 {
    /*
        需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
        		学生的姓名和年龄来自于键盘录入
     */
    public static void main(String[] args) {
        // 2. 创建集合对象
        ArrayList<Student> list = new ArrayList<>();
        Student stu1 = getStudent();
        Student stu2 = getStudent();
        Student stu3 = getStudent();
        // 5. 往集合中添加学生对象
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        //  6. 遍历集合,采用通用遍历格式实现
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            System.out.println(stu.getName() + "..." + stu.getAge());
        }
    }

    public static Student getStudent() {
        // 3. 键盘录入学生对象所需要的数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        // next()   nextInt();
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        int age = sc.nextInt();
        // 4. 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
        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) {
        // 1. 创建集合对象
        ArrayList<String> list = new ArrayList<>();
        // 2. 调用add方法,添加字符串
        list.add("test");
        list.add("张三");
        list.add("李四");
        list.add("test");
        list.add("test");
        // 3. 遍历集合,取出每一个字符串元素
        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            // 4. 加入if判断,如果是test字符串,调用remove方法删除
            //if(s.equals("test")){}
            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) {
        // 7. main方法中测试该方法
        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());
        }
    }

    // 1. 定义方法,方法的形参定义为ArrayList<Student> list
    public static ArrayList<Student> getList(ArrayList<Student> list) {
        // 2. 方法内部定义新集合,准备存储筛选出的学生对象 ArrayList<Student> newList
        ArrayList<Student> newList = new ArrayList<>();
        // 3. 遍历原集合,获取每一个学生对象
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            // 4. 通过学生对象调用getAge方法获取年龄,并判断年龄是否低于18
            int age = stu.getAge();
            if (age < 18) {
                //  5. 将年龄低于18的学生对象存入新集合
                newList.add(stu);
            }
        }
        // 6. 返回新集合
        return newList;
    }
}
举报

相关推荐

第四章

第四章总结

第四章:表

第四章、数组

第四章:Hbase

0 条评论