集合 ArrayList
集合
为什么要有集合?
 数组已经创建是不可变的,集合是可变的,可后期添加。
 集合添加后元素后长度会自动扩容。
集合和数组的对比:
- 
长度 数组长度固定,集合长度可变 
- 
存储类型 数组可以存储基本数据类型和引用数据类型 集合只能存储引用数据类型,不能存储基本数据类型,如果要存储基本数据类型需要转换成对应的包装类进行存储。 
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;
    }
}
集合架构
集合体系结构
List系列集合:添加的元素是有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
有序:存取的顺序是相同的。
可重复:集合中可以存储重复的内容。
有索引:可以通过索引获取集合中的每一个元素
Collection
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
| 方法名称 | 说明 | 
|---|---|
| public boolean add(E e) | 把给定的对象添加到当前的集合中,返回值是布尔类型,说明添加成功 | 
| public void clear() | 清空集合中所有的元素 | 
| public boolean remove(E e) | 把给定的对象再当前集合中删除 | 
| public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 | 
| public boolean isEmpty() | 判断当前集合是否为空 | 
| public int size() | 返回集合中元素的个数/集合的长度 | 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号