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;
​
    }
​
}
相关推荐
汤姆和杰瑞在瑞士吃糯米粑粑13 分钟前
【C++学习篇】AVL树
开发语言·c++·学习
J不A秃V头A18 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
DARLING Zero two♡21 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
虾球xz25 分钟前
游戏引擎学习第58天
学习·游戏引擎
小池先生32 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
LuH112435 分钟前
【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo
论文阅读·笔记
CodeClimb35 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng38 分钟前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随1 小时前
Redis内存碎片详解
java·开发语言
brrdg_sefg1 小时前
gitlab代码推送
java