Java的常见API(2)

0 阅读2分钟

集合ArrayList

  • 是一种长度可变的容器

image.png

ArrayList

image.png

  • 问题:能判断集合中存储的是什么类型的数据吗?

    如果没有进行限定,此时集合可以存储任意类型的数据;
    
  • 但是取数据的时候也会有问题: 取出来的数据用什么变量接受呢? int? Double? 还是对象? 只能通过顶层接受。

Object a = list.get(0);
if(a instanceof int){
...
    }else if (...)
    ...//太复杂了

这时候就涉及多态的弊端了:无法使用子类的独有功能;

  • 所以我们会用泛型去限定集合能存储什么数据:
  ArrayList<String> list = new ArrayList<>()

ArrayList的常见方法

1.添加数据

  • true: 添加成功 false:添加失败

  • 此时add方法在任意情况下都会添加成功;

  • 因为在Java中,有很多很多集合 HashSet(元素)要统一 第一次aaa(true) 第二次aaa(false)

  • 设计: 跟其他集合保持统一(面向对象的思想)方法肯定不写在ArrayList,这样的话每个集合的add方法可能五花八门,放大发写在最上层的Collection接口中,并定义为抽象;

image.png

boolean res = list.add("add");
sout(res); //true
list.add(2,"qqq");//2为插入位置的索引

2.删除数据

  • 根据元素内容进行删除:
    • 存在: true 不存在 false
boolean res = list.remove("qqq")
  • 根据索引进行删除
    • 把被删除的索引进行返回
String res = list.remove(1);

3.修改数据

  • 将指定位置的数据,修改为新元素、将被替换的元素进行返回;
String res = list.set(0,"ZZZ");
    sout(res); //aaa(被替换的元素是aaa)

4.查找数据

  • 获取特定索引的数据
String res = list.get(0);
  • 遍历: get+size
  • 遍历: 把容器里面的数据一个一个的拿出来,可以进行打印,计算,处理;

image.png

  • 只能看一看集合里有什么,无法操作里面的元素;
sout(list);

基本数据类型对应的包装类

image.png

  • 因为集合不能存储基本数据类型,所以需要包装类包装;
public class Memory{
        psvm{
            int a = 10;  //基本数据类型
            Integer b = 10;  //引用数据类型
        }
    }
  • 相当于创建了一个对象;

image.png

总结

image.png

案例:遍历集合并查找学号


public class Test {
    public static void main(String[] args) {
        Student s1 = new Student("张三", 18, "20230001");
        Student s2 = new Student("李四", 19, "20230002");
        Student s3 = new Student("王五", 18, "20230001");

        ArrayList<Student> list = new ArrayList<>();

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

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).toString());
        }

        int index = Search(list, "20230001");
        System.out.println(index);
    }

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