集合 ArrayList

发布时间 2023-04-22 01:13:12作者: 渣渣x

集合

为什么要有集合?

​ 数组已经创建是不可变的,集合是可变的,可后期添加。

​ 集合添加后元素后长度会自动扩容

集合和数组的对比:

  • 长度

    数组长度固定,集合长度可变

  • 存储类型

    数组可以存储基本数据类型引用数据类型

    集合只能存储引用数据类型,不能存储基本数据类型,如果要存储基本数据类型需要转换成对应的包装类进行存储。

ArrayList

//1.创建集合的对象
//泛型:限定集合中存储的数据类型 <Object>,引用数据类型,后面第二个<>内的数据类型声明可以不写,但是<>必须要有
//ArrayList<String> list = new ArrayList<String>();
//JDK7

//此时我们创建的是ArrayList对象,而ArrayList是java已经写好的一个类
//这个类在低层做了一些处理
//打印对象不是地址值,而是集合中存储数据内容
//在展示的时候会拿[]把所有的数据进行包裹
ArrayList<String> list = new ArrayList<>();
System.out.println(list);

ArrayList成员方法:

方法名 说明
boolean add(E e) 添加元素,返回值表示是否添加成功
boolean remove (E e) 删除元素,返回值表示是否删除成功
E remove(int index) 删除指定索引的元素,返回被删除的元素
E get(int index,E e) 修改指定索引下的元素,返回原来的元素
E get(int index) 获取指定索引下的元素
int size() 集合的长度,也就是集合中元素的个数
package com.xx.mycollection;

import java.util.ArrayList;

/*
        | boolean add(E e)     | 添加元素,返回值表示是否添加成功     |    添加
        | boolean remove (E e) | 删除元素,返回值表示是否删除成功     |    删除
        | E remove(int index)  | 删除指定索引的元素,返回被删除的元素 |
        | E get(int index,E e) | 修改指定索引下的元素,返回原来的元素 |     修改
        | E get(int index)     | 获取指定索引下的元素               |     查询
        | int size()           | 集合的长度,也就是集合中元素的个数   |     获取长度
*/
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //1.创建一个集合
        ArrayList<String> list = new ArrayList<>();

        //2.添加元素
        list.add("aaa");
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(list);

        //3.删除元素
        //一、根据内容删除
//        boolean result = list.remove("aaa");
//        System.out.println(result);
//
//        boolean result2 = list.remove("ddd");
//        System.out.println(result2);
        //二、根据索引删除
//        String str =list.remove(2);
//        System.out.println(str);

        //4.修改
/*        String ddd = list.set(1, "ddd");
        System.out.println(ddd);*/

        //5.查询
/*
        String s = list.get(2);
        System.out.println(s);
*/

        //遍历
        for (int i = 0; i < list.size(); i++) {
             //i 索引
            //list.get(i) 元素
            String s = list.get(i);
            System.out.println(s);
        }

        System.out.println(list);
    }
}

基本数据类型对应的包装类:

基本数据类型 对应的包装类
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
boolean Boolean

练习

添加学生对象进行遍历:

​ 需求:定义一个集合,添加一些学生对象,并进行遍历

​ 学生类的属性为:姓名,年龄

学生类Student

package com.xx.mycollection.test;

public class Student {
    private int age;
    private String name;

    public Student() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

main函数

package com.xx.mycollection.test;

import java.util.ArrayList;

public class Test03 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<Student> list = new ArrayList<>();

        //2.创建学生对象
        Student s1 = new Student(13,"张三");
        Student s2 = new Student(14,"李四");
        Student s3 = new Student(15,"王五");

        //3.添加元素
        list.add(s1);
        list.add(s2);
        list.add(s3);

        //4.遍历集合
        for (int i = 0; i < list.size(); i++) {
            //i 索引 list.get(i)  元素/学生对象
            Student stu = list.get(i);
            System.out.println(stu.getAge()+","+stu.getName());
        }
    }
}

键盘输入学生信息:

package com.xx.mycollection.test;

import java.util.ArrayList;
import java.util.Scanner;

public class Test04 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<Student> list = new ArrayList<>();

        //2.键盘录入学生的信息并添加到集合当中
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            Student s = new Student();

            System.out.println("请输入学生的年龄:");
            int age = scanner.nextInt();
            System.out.println("请输入学生的姓名:");
            String name = scanner.next();

            //把name和age赋值给学生对象
            s.setName(name);
            s.setAge(age);

            //把学生对象添加到集合中
            list.add(s);
        }
        //3.b循环遍历输出集合中元素
        for (int i = 0; i < list.size(); i++) {
            Student s1 = list.get(i);
            System.out.println(s1.getAge()+","+s1.getName());
        }


    }
}

添加用户对象并判断是否存在:

​ 需求:

  • main 方法中定义一个集合,存入三个用户对象。

    • 用户属性为:id,username,password
  • 要求:定义一个方法,根据id查找对应的用户信息。

    如果存在,返回true

    如果不存在,返回false

    package com.xx.mycollection.test;
    
    /*添加用户对象并判断是否存在:
    
            需求:
    
            - main 方法中定义一个集合,存入三个用户对象。
            - 用户属性为:id,username,password
    
            - 要求:定义一个方法,根据id查找对应的用户信息。
    
            如果存在,返回true
    
            如果不存在,返回false*/
    import java.util.ArrayList;
    
    public class Test05 {
        public static void main(String[] args) {
            ArrayList<User> list = new ArrayList<>();
            User user1 = new User(1,"张三","123");
            User user2 = new User(2,"李四","456");
            User user3 = new User(3,"王五","789");
    
            list.add(user1);
            list.add(user2);
            list.add(user3);
            for (int i = 0; i < list.size(); i++) {
                User user = list.get(i);
                System.out.println(user.getId()+","+user.getUserName()+","+user.getPassword());
            }
            System.out.println(new Test05().chazhao(list,4));
        }
        public boolean chazhao(ArrayList<User> list,int id){
            for (int i = 0; i < list.size(); i++) {
                User user =list.get(i);
                if (user.getId()==id){
                    return true;
                }
            }
            return false;
        }
    }
    

需求:

  • 定义Javabean类:Phone
  • Phone属性:品牌,价格
  • main方法中定义一个集合,存入三个手机对象。
  • 分别为:小米,1000;苹果8000;锤子2999。
  • 定义一个方法,将价格低于3000的手机信息返回。

Phone类

package com.xx.mycollection.test;

public class Phone {
    private String brand;
    private int price;

    public Phone() {
    }

    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

main方法类

package com.xx.mycollection.test;
/*
需求:

        - 定义Javabean类:Phone
        - Phone属性:品牌,价格
        - main方法中定义一个集合,存入三个手机对象。
        - 分别为:小米,1000;苹果8000;锤子2999。
        - 定义一个方法,将价格低于3000的手机信息返回。
*/

import java.util.ArrayList;

public class Test07 {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<Phone> list = new ArrayList<>();

        //2.创建手机对象
        Phone phone1 = new Phone("小米", 1000);
        Phone phone2 = new Phone("苹果", 8000);
        Phone phone3 = new Phone("锤子", 2999);

        //3.添加数据
        list.add(phone1);
        list.add(phone2);
        list.add(phone3);

        //4.调用方法
        ArrayList<Phone> phoneInfoList = getPhoneInfo(list);

        //5.遍历集合
        for (int i = 0; i < phoneInfoList.size(); i++) {
            Phone phoneInfo = phoneInfoList.get(i);
            System.out.println(phoneInfo.getBrand()+","+phoneInfo.getPrice());
        }

    }
    //1.我要干嘛?  查询手机信息
    //2.我干这件事情,需要什么才能完成?  集合
    //3.我干完了,方法的调用处是否需要继续使用结果  返回

    //技巧
    //如果我们需要返回多个数据,可以把这些数据先放到一个容器当中,再把容器返回
    //容器:集合 数组
    public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){
        //定义一个集合用于存储价格低于3000的手机对象
        ArrayList<Phone> resultList = new ArrayList<>();
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Phone phone = list.get(i);
            //如果当前手机的价格低于3000,那么就把手机对象添加到resultList
            if (phone.getPrice()<3000){
                resultList.add(phone);
            }
        }
        //返回resultList
        return resultList;
    }
}

集合架构

集合体系结构

image-20230420184828391

List系列集合:添加的元素是有序、可重复、有索引。

Set系列集合:添加的元素是无序、不重复、无索引。

有序:存取的顺序是相同的。

可重复:集合中可以存储重复的内容。

有索引:可以通过索引获取集合中的每一个元素

Collection

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

image-20230420185626196

方法名称 说明
public boolean add(E e) 把给定的对象添加到当前的集合中,返回值是布尔类型,说明添加成功
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把给定的对象再当前集合中删除
public boolean contains(Object obj) 判断当前集合中是否包含给定的对象
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数/集合的长度