黑马Java——ArrayList集合

目录

1.ArrayList

集合和数组的优势对比:

1.1 ArrayList类概述

1.2 ArrayList类常用方法

1.2.1 构造方法

1.2.2 成员方法

2.练习 

2.1添加字符串和数组并遍历

2.1.1添加字符串

2.1.2添加数字

 2.2添加学生对象并遍历

2.2.1直接给字符串赋值

2.2.2对象的数据来自键盘录入 

2.3查找用户是否存在

2.3.1需求:

 2.3.2

2.4返回多个数据


1.ArrayList

集合和数组的优势对比:

  1. 长度可变

  2. 添加数据的时候不需要考虑索引,默认将数据添加到末尾

1.1 ArrayList类概述

  • 什么是集合

    提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

  • ArrayList集合的特点

    长度可以变化,只能存储引用数据类型。

  • 泛型的使用

    用于约束集合中存储元素的数据类型

1.2 ArrayList类常用方法

1.2.1 构造方法
方法名 说明
public ArrayList() 创建一个空的集合对象
1.2.2 成员方法

方法名 说明
public boolean add(要添加的元素) 将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素) 删除指定元素,返回值表示是否删除成功
public E remove(int index) 删除指定索引处的元素,返回被删除的元素
public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
public E get(int index) 返回指定索引处的元素
public int size() 返回集合中的元素的个数

2.练习 

2.1添加字符串和数组并遍历

2.1.1添加字符串

  • 需求:定义一个集合,添加字符串,并进行遍历
  • 遍历格式参照:[元素1,元素2,元素3]。
package com.yaqi.tese;

import java.util.ArrayList;

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

        //2.添加元素
        list.add("点赞了吗?");
        list.add("收藏了吗?");
        list.add("投币了吗?");
        list.add("转发了吗?");

        //3.遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++) {
            if(i == list.size()-1){
                System.out.print(list.get(i));
            }else{
                System.out.print(list.get(i)+", ");
            }
        }
        System.out.print("]");
    }
}

[点赞了吗?, 收藏了吗?, 投币了吗?, 转发了吗?]

2.1.2添加数字

  • 需求:定义一个集合,添加数字,并进行遍历。
  • 遍历格式参照:[元素1,元素2,元素3]。
package com.yaqi.tese;

import java.util.ArrayList;

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

        //2.添加元素
        //jdk5以后 int  Integer 之间是可以互相转化的
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        //3.遍历集合
        System.out.print("[");
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size() - 1) {
                System.out.print(list.get(i));
            } else {
                System.out.print(list.get(i) + ", ");
            }
        }
        System.out.print("]");

    }
}

 2.2添加学生对象并遍历

2.2.1直接给字符串赋值

  • 需求:定义一个集合,添加一些学生对象,并进行遍历
  • 学生类的属性为:姓名,年龄。
  • 定义一个学生类
package com.yaqi.tese;

public class Student {
    //1.私有化成员变量
    //2.空参构造方法
    //3.带全部参数构造方法
    //4.get/set方法

    private String name;
    private int age;

    public Student() {
    }

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

    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;
    }
}

测试类

package com.yaqi.tese;

import java.util.ArrayList;
//添加学生对象并进行遍历
public class Test4 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<Student> list = new ArrayList<>();

        //2.创建学生对象
        Student s1 = new Student("zhangsan", 23);
        Student s2 = new Student("lisi", 24);
        Student s3 = new Student("wangwu", 25);

        //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.getName()+","+stu.getAge());
        }
    }
}

2.2.2对象的数据来自键盘录入 

  • 需求:定义一个集合,添加一些学生对象,并进行遍历
  • 学生类的属性为:姓名,年龄。
  • 对象的数据来自键盘录入。
package com.yaqi.tese;

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

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

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

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

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

            //把学生对象添加到集合当中
            list.add(s);

        }

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

        }
    }
}

2.3查找用户是否存在

2.3.1
需求:

  • 1.main方法中定义一个集合,存入三个用户对象。用户属性:id,username,password
  • 2.要求:定义一个方法,根据id查找对应的用户信息。如果存在返回true,不存在返回false。

用户类

package com.yaqi.tese;

public class User {
    private String id;
    private String usename;
    private String password;

    public User() {
    }

    public User(String id, String usename, String password) {
        this.id = id;
        this.usename = usename;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsename() {
        return usename;
    }

    public void setUsename(String usename) {
        this.usename = usename;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
package com.yaqi.tese;


import java.util.ArrayList;

/*需求:
1,main方法中定义一个集合,存入三个用户对象。
用户属性为:id,username,password
2,要求:定义一个方法,根据id查找对应的用户信息。
如果存在,返回true
如果不存在,返回false*/
public class Test6 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<User> list = new ArrayList<>();

        //2.创建三个用户对象
        User u1 = new User("heima001","zhangsan", "123456");
        User u2 = new User("heima002","lisi", "12345678");
        User u3 = new User("heima003","wangwu", "1234qq");

        //3.把用户添加到集合中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法看id是否存在
        boolean flag = contains(list, "heima001");

        //5.打印结果
        System.out.println(flag);

    }
    //1.我要干嘛?   根据id查找用户
    //2.我干这件事需要什么才能完成?   list  id
    //3.调用处是否需要使用方法的结果? 返回
    public static boolean contains(ArrayList<User> list,String id){
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            String uId = u.getId();
            if(uId.equals(id)){
                //如果找到了直接返回true
                return true;
            }
        }
        //当循环结束表示集合里面所有的元素都已经比较完毕,还没有一样的,那么返回false
        return false;

    }

}

 2.3.2

需求:
1,main方法中定义一个集合,存入三个用户对象。
      用户属性为:id,username,password
2,要求:定义一个方法,根据id查找对应的用户信息。
      如果存在,返回索引
      如果不存在,返回-1

package com.yaqi.tese;

import java.util.ArrayList;

/*需求:
1,main方法中定义一个集合,存入三个用户对象。
      用户属性为:id,username,password
2,要求:定义一个方法,根据id查找对应的用户信息。
      如果存在,返回索引
      如果不存在,返回-1
*/
public class Test7 {
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<User> list = new ArrayList<>();

        //2.创建三个用户对象
        User u1 = new User("heima001", "zhangsan", "123456");
        User u2 = new User("heima002", "lisi", "12345678");
        User u3 = new User("heima003", "wangwu", "1234qwer");

        //3.把用户对象添加到集合当中
        list.add(u1);
        list.add(u2);
        list.add(u3);

        //4.调用方法
        int i = getIndex(list, "heima004");
        //5.打印
        System.out.println(i);

    }


    //获取索引值方法
    public static int getIndex(ArrayList<User> list,String id){
        for (int i = 0; i < list.size(); i++) {
            User  u = list.get(i);
            String uid = u.getId();
            if(uid.equals(id)){
                return i;
            }
        }
        return -1;
    }

}

2.4返回多个数据

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

public class Phone {
    //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;
    }
}
package com.yaqi.tese;

import java.util.ArrayList;

public class Test8 {
    public static void main(String[] args) {

        //1.创建集合对象
        ArrayList<Phone> list = new ArrayList<>();

        //2.创建手机的对象
        Phone p1 = new Phone("小米",1000);
        Phone p2 = new Phone("苹果",8000);
        Phone p3 = new Phone("锤子",2999);

        //3.添加数据
        list.add(p1);
        list.add(p2);
        list.add(p3);

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

        //5.遍历集合
        for (int i = 0; i < phoneInfoList.size(); i++) {
            Phone phone = phoneInfoList.get(i);
            System.out.println(phone.getBrand() + ", " + phone.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 p = list.get(i);
            int price = p.getPrice();
            //如果当前手机的价格低于3000,那么就把手机对象添加到resultList中
            if(price < 3000){
                resultList.add(p);
            }
        }
        //返回resultList
        return resultList;

    }

}