集合基础ArrayList

集合概述

集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
将要学习的集合类:ArrayList

  • 可调整大小的数组实现
  • <E>:是一种特殊的数据结构,泛型 -> 限定集合中存储数据的类型
  • 使用:在出现E的地方使用引用数据类型替换即可
  • 举例:ArrayList < String >,Array < Student>
     

集合和数组的区别

  • 长度:数组的长度是固定的,集合的长度是可变的(自动)
  • 存储类型:数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型,如果想存基本数据类型,需要把他们变成其对应的包装类

 

ArrayList构造方法

方法名说明
public ArrayList()创建一个空的集合对象

代码演示:

ArrayList<String> array = new ArrayList<String>();
        
//JDK7以后 可以省略后面<>中的数据类型
ArrayList<String> array = new ArrayList<>();		

 

ArrayList集合常用方法

方法名说明
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合的指定位置插入指定的元素
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 ArrayList2 {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();

        array.add("hello");
        array.add("world");
        array.add("java");
        array.add(0,"cat");
        array.add(1,"pig");

        System.out.println(array.remove("maomao"));
        System.out.println(array.remove("world"));
        System.out.println("array: " + array);
        System.out.println("- - - - - - - - - - - - -");

        System.out.println(array.remove(1));
        System.out.println("array: " + array);
        System.out.println("- - - - - - - - - - - - -");

        System.out.println(array.set(2, "dog"));
        System.out.println("array: " + array);
        System.out.println("- - - - - - - - - - - - -");

        System.out.println(array.get(0));
        System.out.println("- - - - - - - - - - - - -");

        System.out.println(array.size());
    }
}

输出结果:

false
true
array: [cat, pig, hello, java]
- - - - - - - - - - - - -
pig
array: [cat, hello, java]
- - - - - - - - - - - - -
java
array: [cat, hello, dog]
- - - - - - - - - - - - -
cat
- - - - - - - - - - - - -
3

 

案例1:存储字符串并遍历

需求:
创建一个存储字符串的集合,存储若干个字符串元素,使用程序实现在控制台遍历该集合
代码实现:

import java.util.ArrayList;

public class ArrayList {
    public static void main(String[] args) {
        ArrayList<String> array = new ArrayList<>();

        array.add("wo");
        array.add("shi");
        array.add("maomao");

        for (int i = 0; i < array.size(); ++i) {
            //System.out.println(array.get(i));
            //通用格式
            String s = array.get(i);
            System.out.println(s);
        }
    }
}

解释: 为什么要用这个通用格式?

	String s = array.get(i);
    System.out.println(s);

用s接受这个对象,可能还需要做其他别的操作,所以这个作为通用格式

输出结果:

wo
shi
maomao

 

案例2:存储基本数据类型

需求:定义一个集合,添加数字,并进行遍历
遍历格式参照:[元素1,元素2,元素3]

基本数据类型对应的包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
public class ArrayTest {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        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("]");
    }
}

案例3:存储学生对象并遍历

需求:
创建一个存储学生对象的集合,存储三个学生对象,使用程序实现在控制台遍历该集合

代码实现:
先建立一个学生类:

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

    省略构造函数和成员方法
}

测试类:

import java.util.ArrayList;

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<Student> array = new ArrayList<>();

        Student s1 = new Student("duoduo", 2);
        Student s2 = new Student("cat", 24);
        Student s3 = new Student("tiger", 22);

        array.add(s1);
        array.add(s2);
        array.add(s3);

        for (int i = 0; i < array.size(); ++i) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}

输出结果:

duoduo,2
cat,24
tiger,22

 

案例4:存储学生对象并遍历(升级版)

需求:
创建一个存储学生对象的集合,存储三个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自键盘录入

代码实现:
学生类:为了方便键盘录入,将学生类的成员变量都定义为String类型(其他和案例2的学生类一样)

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

    //省略构造函数和成员方法
}

测试类:

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

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<Student> array = new ArrayList<>();
        addStudent(array);
        addStudent(array);
        addStudent(array);

        for (int i = 0; i < array.size(); ++i) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }

    }

    public static void addStudent(ArrayList<Student> array) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名: ");
        String name = sc.nextLine();

        System.out.println("请输入学生年龄: ");
        String age = sc.nextLine();

        Student s = new Student();
        s.setAge(age);
        s.setName(name);

        array.add(s);
    }
}

输出结果:

请输入学生姓名: 
maomao
请输入学生年龄: 
22
请输入学生姓名: 
duoduo
请输入学生年龄: 
2
请输入学生姓名: 
xiaozhu
请输入学生年龄: 
24
maomao,22
duoduo,2
xiaozhu,24

案例5:添加用户对象并判定是否存在

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

package String;

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

    //省略构造函数和成员方法
}
import java.util.ArrayList;

public class Test5 {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        User u1 = new User("001", "duoduo", "123");
        User u2 = new User("002", "xiaozhu", "456");
        User u3 = new User("003", "xiaomao", "789");

        list.add(u1);
        list.add(u2);
        list.add(u3);

        boolean flag = isContains(list, "003");
        System.out.println(flag);
    }

    public static boolean isContains(ArrayList<User> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return true;
            }
        }
        return false;
    }
}

案例6:添加用户对象并返回查找用户信息

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

public static int getIndex(ArrayList<User> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return i;
            }
        }
        return -1;
    }

public static boolean isContains(ArrayList<User> list, String id) {
        return getIndex(list, id) >= 0;
    }

案例7:添加手机对象并返回要求的数据

需求:

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

    //省略构造函数和成员方法
}
public class PhoneTest {
    public static void main(String[] args) {
        ArrayList<Phone> list = new ArrayList<>();

        Phone p1 = new Phone("小米", 1000);
        Phone p2 = new Phone("苹果", 8000);
        Phone p3 = new Phone("锤子", 2999);

        list.add(p1);
        list.add(p2);
        list.add(p3);

        ArrayList<Phone> resultList = getPhoneInfo(list, 3000);
        for (int i = 0; i < resultList.size(); i++) {
            Phone phone = resultList.get(i);
            System.out.println(phone.getBrand() + "," + phone.getPrize());
        }
    }

    public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list, int money) {
        ArrayList<Phone> resultList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            Phone p = list.get(i);
            if (p.getPrize() < money) {
                resultList.add(p);
            }
        }
        return resultList;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值