Java学习笔记2024/2/20

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() 返回集合中的元素的个数
1.2.3 示例代码
复制代码
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> array = new ArrayList<String>();
​
        //添加元素
        array.add("hello");
        array.add("world");
        array.add("java");
​
        //public boolean remove(Object o):删除指定的元素,返回删除是否成功
        //        System.out.println(array.remove("world"));
        //        System.out.println(array.remove("javaee"));
​
        //public E remove(int index):删除指定索引处的元素,返回被删除的元素
        //        System.out.println(array.remove(1));
​
        //IndexOutOfBoundsException
        //        System.out.println(array.remove(3));
​
        //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
        //        System.out.println(array.set(1,"javaee"));
​
        //IndexOutOfBoundsException
        //        System.out.println(array.set(3,"javaee"));
​
        //public E get(int index):返回指定索引处的元素
        //        System.out.println(array.get(0));
        //        System.out.println(array.get(1));
        //        System.out.println(array.get(2));
        //System.out.println(array.get(3)); //?????? 自己测试
​
        //public int size():返回集合中的元素的个数
        System.out.println(array.size());
​
        //输出集合
        System.out.println("array:" + array);
    }
}

1.3 ArrayList存储字符串并遍历

1.3.1 案例需求

创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合

1.3.2 代码实现
复制代码
public class ArrayListDemo3 {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<String> list = new ArrayList<>();
​
        //2.添加元素
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
​
        //3.遍历
        //快捷键: list.fori 正向遍历
        //list.forr 倒着遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++) {
            //i 依次表示集合里面的每一个索引
​
            if(i == list.size() - 1){
                //最大索引
                System.out.print(list.get(i));
            }else{
                //非最大索引
                System.out.print(list.get(i) + ", ");
            }
        }
        System.out.print("]");
    }
}
​

1.4 ArrayList存储学生对象并遍历

1.4.1 案例需求

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

1.4.2 代码实现
复制代码
public class ArrayListDemo4 {
    public static void main(String[] args) {
        //1.创建集合对象,用来存储数据
        ArrayList<Student> list = new ArrayList<>();
​
        //2.创建学生对象
        Student s1 = new Student("zhangsan",16);
        Student s2 = new Student("lisi",15);
        Student s3 = new Student("wangwu",18);
​
        //3.把学生对象添加到集合中
        list.add(s1);
        list.add(s2);
        list.add(s3);
​
        //4.遍历
        for (int i = 0; i < list.size(); i++) {
            //i 依次表示集合中的每一个索引
            Student stu = list.get(i);
            System.out.println(stu.getName() + ", " + stu.getAge());
        }
​
​
​
    }
}
​

1.5 查找用户的索引

需求:

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

用户属性为:id,username,password

2,要求:定义一个方法,根据id查找对应的学生信息。

如果存在,返回索引

如果不存在,返回-1

代码示例:

复制代码
public class ArrayListDemo6 {
    public static void main(String[] args) {
        /*需求:
        1,main方法中定义一个集合,存入三个用户对象。
        用户属性为:id,username,password
        2,要求:定义一个方法,根据id查找对应的学生信息。
        如果存在,返回索引
        如果不存在,返回-1*/
​
​
        //1.创建集合对象
        ArrayList<User> list = new ArrayList<>();
​
        //2.创建用户对象
        User u1 = new User("heima001", "zhangsan", "123456");
        User u2 = new User("heima002", "lisi", "1234");
        User u3 = new User("heima003", "wangwu", "1234qwer");
​
        //3.把用户对象添加到集合当中
        list.add(u1);
        list.add(u2);
        list.add(u3);
​
        //4.调用方法,通过id获取对应的索引
        int index = getIndex(list, "heima001");
​
        System.out.println(index);
​
    }
​
​
    //1.我要干嘛?  根据id查找对应的学生信息
    //2.我干这件事情需要什么才能完成?   集合 id
    //3.方法的调用处是否需要继续使用方法的结果?
    //要用必须返回,不要用可以返回也可以不返回
    //明确说明需要有返回值 int
    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;
            }
        }
        //因为只有当集合里面所有的元素都比较完了,才能断定id是不存在的。
        return -1;
    }
}
​

1.6 判断用户的是否存在

复制代码
public class ArrayListDemo5 {
    public static void main(String[] args) {
       /* 需求:
        1,main方法中定义一个集合,存入三个用户对象。
        用户属性为:id,username,password
        2,要求:定义一个方法,根据id查找对应的学生信息。
        如果存在,返回true
        如果不存在,返回false*/
​
        //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.调用方法,查询id是否存在
        boolean result = contains(list, "heima001");
        System.out.println(result);
​
    }
​
    //定义在测试类中的方法需要加static
    //1.我要干嘛? 我要根据id查询学生是否存在
    //2.我干这件事情,需要什么才能完成? 集合 id
    //3.方法的调用处是否需要使用方法的结果?
    //如果要用,必须返回,如果不用,可以返回也可以不返回
    //但是本题明确说明需要返回
    public static boolean contains(ArrayList<User> list, String id){
        //循环遍历集合,得到集合里面的每一个元素
        //再进行判断
​
        for (int i = 0; i < list.size(); i++) {
            //i 索引  list.get(i); 元素
            User u = list.get(i);
            //判断id是否存在,我是拿着谁跟谁比较
            //需要把用户对象里面的id拿出来再进行比较。
            String uid = u.getId();
            if(id.equals(uid)){
                return true;//return 关键字:作用就是结束方法。
            }
        }
        //只有当集合里面所有的元素全部比较完毕才能认为是不存在的。
        return false;
    }
​
}
​

课堂演示:

复制代码
package demo;
​
import java.util.ArrayList;
​
public class demo1 {
    public static void main(String[] args) {
                //1.创建集合的对象
                //泛型:限定集合中存储数据的类型
                //ArrayList<String> list = new ArrayList<String>();
                //JDK7:
​
                //此时我们创建的是ArrayList的对象,而ArrayList是java已经写好的一个类
                //这个类在底层做了一些处理
                //打印对象不是地址值,而是集合中存储数据内容
                //在展示的时候会拿[]把所有的数据进行包裹
                ArrayList<String> list = new ArrayList<>();
                System.out.println(list);
​
            }
        }
复制代码
package demo;
​
import java.util.ArrayList;
​
public class demo2 {
    /*
        boolean add(E e)        添加
​
        boolean remove(E e)     删除
        E remove(int index)
​
        E set(int index,E e)    修改
​
        E get(int index)        查询
        int size()              获取长度
​
     */
​
        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 result1 = list.remove("aaa");
//        System.out.println(result1);
//            System.out.println(list);
//
//        boolean result2 = list.remove("ddd");
//        System.out.println(result2);
//            System.out.println(list);
//
//        String str = list.remove(2);
//        System.out.println(str);
//            System.out.println(list);
​
//            //修改元素
//        String result = list.set(1, "ddd");
//        System.out.println(result);
//            System.out.println(list);
​
//            //查询元素,得到元素
//        String s = list.get(2);//因为查询得到的是字符串,所以用字符串数据类型来接收这样显得更直观,更容易记忆,直接打印当然也可以,还有之前的字符数据类型也是一样的道理
//        System.out.println(s);
//            System.out.println(list);
​
            //遍历
            for (int i = 0; i < list.size(); i++) {
                //i 索引
                //list.get(i) 元素
                String str = list.get(i);
                System.out.println(str);
            }
            System.out.println(list);
        }
    }
复制代码
package demo;
​
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.println("]");
        }
    }
复制代码
package demo;
​
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.println("]");
    }
}
复制代码
package demo;
​
import java.util.ArrayList;
​
public class Test3 {
    public static void main(String[] args) {
        ArrayList<Character> list = new ArrayList<>();
​
        list.add('a');
        list.add('b');
        list.add('c');
​
        System.out.println(list);
    }
}
复制代码
package demo.demo1_1;
​
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 demo.demo1_1;
​
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());
        }
    }
}
复制代码
package demo.demo1_1;
​
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());
        }
    }
}
复制代码
package demo.demo1_2;
​
public class User {
    private String id;
    private String username;
    private String password;
​
​
    public User() {
    }
​
    public User(String id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
​
    public String getId() {
        return id;
    }
​
    public void setId(String id) {
        this.id = id;
    }
​
    public String getUsername() {
        return username;
    }
​
    public void setUsername(String username) {
        this.username = username;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
}
复制代码
package demo.demo1_2;
​
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","1234qwer");
​
        //3.把用户对象添加到集合当中
        list.add(u1);
        list.add(u2);
        list.add(u3);
​
        //4.调用方法查看id是否存在
        boolean flag = contains(list, "heima0010");
​
        //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;*/
​
        return getIndex(list,id) >= 0;
​
    }
​
    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;
    }
}
复制代码
package demo.demo1_2;
​
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 index = getIndex(list, "heima004");
​
        //5.打印
        System.out.println(index);
​
    }
​
    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;
    }
}
复制代码
package demo.demo1_3;
​
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 demo.demo1_3;
​
/*
需求:
        定义Javabean类:Phone
        Phone属性:品牌,价格。
        main方法中定义一个集合,存入三个手机对象。
        分别为:小米,1000。苹果,8000。锤子 2999。
        定义一个方法,将价格低于3000的手机信息返回。
*/
​
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;
​
    }
​
}
相关推荐
lulinhao16 分钟前
HCIA/HCIP基础知识笔记汇总
网络·笔记
腥臭腐朽的日子熠熠生辉39 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
ejinxian41 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之1 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
WarPigs1 小时前
blender场景导入Unity的流程(个人总结)
笔记
爱的叹息1 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
程序猿chen2 小时前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算