怀旧网,博客详情:Java Collection的使用

1、java枚举类详解

2、java String 类和类方法详解

3、StringBuffer 详解

4、Java Math 类详解

5、java random详解

6、java Date类使用讲解

7、java 集合类详解

8、java算法二分查找

9、SpringBoot 在初始化加载无法使用@Value的时候读取配置文件教程

10、springboot 项目配置本地jar包导入

11、单个java文件运行需要带上jar包的用法

12、spring boot 项目配置https服务

13、Java异常详解

14、Java Collection的使用

15、Java List 集合

16、Java ArrayList 介绍

17、Java LinkedList 讲解

18、Java Set 集合介绍

19、Java HashSet 介绍

20、Java TreeSet 介绍

21、Java Map 介绍以及子类介绍

22、Java 多线程使用介绍

23、Java 注解讲解

24、Java 反射讲解

25、Java 反射讲解

26、HashMap 源码讲解

27、面向对象初级教学

28、Java整合JWT使用

原创

Java Collection的使用

Collection 方法介绍

image-20240313092709016

Collection 使用

注意:Collection 是一个接口不能直接创建对象,下面使用实现类的对象ArrayList来测试

创建Collection对象

public static void main(String[] args){
    Collection<String> collection = new ArrayList<>();
}

add方法

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");
    
    // 打印集合
    System.out.println(collection);
}

image-20240313093639810

注意:在使用add方法会返回bool类型数据-在List系列类型中返回值永远都是true

​ 在Set中,如果当前要添加的数据已经存在返回false

因为Set集合元素不可重复,List可重复-所以在添加的时候Set中有这个元素就代表添加失败。


clear方法

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    collection.clear();

    // 打印集合
    System.out.println(collection);
}

image-20240313093547245


remove方法

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    collection.remove("age");

    // 打印集合
    System.out.println(collection);
}

image-20240313093723729

在remove方法中,如果删除成功返回true,删除失败返回false


contains方法

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    collection.remove("age");

    System.out.println(collection.contains("cat"));
    System.out.println(collection.contains("age"));

    // 打印集合
    System.out.println(collection);
}

image-20240313093815247

注意:在contains方法底层实现是依赖于equals方法的,如果在集合中保存的是自定义类的数据,那么一定要重写equals方法。


isEmpty方法

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    System.out.println(collection.isEmpty());
    collection.clear();
    System.out.println(collection.isEmpty());
}

image-20240313093908962

可以直接使用 collection.size() == 0 来代替方法(ArrayList底层就是这样实现的)


size方法

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

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

image-20240313093946886

Collection 的遍历

image-20240313104548507

迭代器遍历

底层实现就是用到了:数据结构中的链表实现

image-20240313100956092

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");
	
    // 获取迭代器的对象
    Iterator<String> iterator = collection.iterator();
	
    // 判断当前指针指向位置是否有元素
    while(iterator.hasNext()){
        // 获取当前位置的元素,并将指针移动到下一个元素的位置
        String data = iterator.next();
        System.out.println(data);
    }
}

image-20240313101256109

总结:

​ 注意:当指针已经移动到最后一个位置,然后在次调用next,此时指定指向的位置没有数据,在调用next就会报错:NoSuchElementException。

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    Iterator<String> iterator = collection.iterator();

    while(iterator.hasNext()){
        String data = iterator.next();
        System.out.println(data);
    }

    String data = iterator.next();
}

image-20240313102200399

​ 在迭代元素的时候不能使用 collection 的remove方法,否则报错,只能在iterator使用前或者使用完毕后才可以使用。

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    Iterator<String> iterator = collection.iterator();
    while(iterator.hasNext()){
        String data = iterator.next();
        collection.remove("dog");
        System.out.println(data);
    }
}

image-20240313103113067

​ 但是也可以使用iterator的remove()方法。进行元素删除。

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    Iterator<String> iterator = collection.iterator();
    while(iterator.hasNext()){
        String data = iterator.next();
        if(data.equals("cat")){
            iterator.remove();
        }
    }

    System.out.println(collection);
}

image-20240313103407658

​ 当迭代器遍历完毕,指定不会复位,相当于遍历的iterator对象是一次性的。

​ 迭代器遍历时,不能使用集合的方法进行添加或者删除元素。

增强for遍历

image-20240313103546052

使用案例测试:

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    for (String s : collection) {
        System.out.println(s);
    }
}

image-20240313103639560

弊端:运行同时不可以修改每次迭代的对象值。

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

    collection.add("dog");
    collection.add("cat");
    collection.add("age");

    for (String s : collection) {
        s = "11";
    }

    System.out.println(collection);
}

image-20240313104041664

可以将每次迭代的 s 当做一个方法的参数,当传入的是一个字符串无法修改原对象的指向地址,但是入股原对象是一个应用类型对象,传过去的地址值,就可以被修改(但是修改的是对象的内容,而还是不能修改对象本身的指向)

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

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public static void main(String[] args){
    Collection<Student> collection = new ArrayList<>();

    collection.add(new Student("dog", 2));
    collection.add(new Student("cat", 1));
    collection.add(new Student("age", 4));

    for (Student student : collection) {
        student = new Student("aa", 10);
    }

    System.out.println(collection);
}

image-20240313104344514

这边可以看到实际的数据没有被修改

public static void main(String[] args){
    Collection<Student> collection = new ArrayList<>();

    collection.add(new Student("dog", 2));
    collection.add(new Student("cat", 1));
    collection.add(new Student("age", 4));

    for (Student student : collection) {
        student.name = "aa";
        student.age = 10;
    }

    System.out.println(collection);
}

image-20240313104424884

修改代码,完成修改

Lambda表达式遍历

image-20240313104626404

注意:jdk8之后的特性,所以需要jdk8或以上版本才可以使用。

①、先试用匿名内部内的方式进行实现

public static void main(String[] args){
    Collection<Student> collection = new ArrayList<>();

    collection.add(new Student("dog", 2));
    collection.add(new Student("cat", 1));
    collection.add(new Student("age", 4));

    collection.forEach(new Consumer<Student>() {
        @Override
        // 一次表示集合中的每一个数据
        public void accept(Student student) {
            System.out.println(student);
        }
    });
}

image-20240313104852787

成功遍历迭代到了对象。

源码实现方式:

image-20240313105158140

原理还是通过for循环的方式进行迭代,将每一个循环出来的元素交给accept方法进行迭代,

指的就是我们实现匿名内部内的 accept 方法。


②、lambda表达式实现

public static void main(String[] args){
    Collection<Student> collection = new ArrayList<>();

    collection.add(new Student("dog", 2));
    collection.add(new Student("cat", 1));
    collection.add(new Student("age", 4));

    collection.forEach((Student sutdent) -> {
        System.out.println(sutdent);
    });
}

简化写法--局限于处理代码就一行的情况

public static void main(String[] args){
    Collection<Student> collection = new ArrayList<>();

    collection.add(new Student("dog", 2));
    collection.add(new Student("cat", 1));
    collection.add(new Student("age", 4));

    collection.forEach(sutdent -> System.out.println(sutdent));
}

image-20240313105616872

单独的输出写法扩展:

public static void main(String[] args){
    Collection<Student> collection = new ArrayList<>();

    collection.add(new Student("dog", 2));
    collection.add(new Student("cat", 1));
    collection.add(new Student("age", 4));

    collection.forEach(System.out::println);
}

image-20240313110024072

总结

image-20240313110102150

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言