Java 集合 Collection介绍及常用方式

 更新时间:2025年05月09日 12:07:02   作者:举一个梨子zz  
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的,这篇文章主要介绍了Java 集合 Collection的常用方式,需要的朋友可以参考下

单列集合体系结构

注意:

List系列集合添加的元素是有序(存取数据的顺序相同),可重复,有索引的

Set系列集合 添加的元素是无序,不能重复,无索引的

Collection介绍

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

常用方法

方法名称说明
public boolean add(E e)把给定的对象添加到当前集合中
public void clear()清空集合中所有的元素
public boolean remove(E e)把给定的对象在当前集合中删除
public boolean contains(0bject obj)判断当前集合中是否包含给定的对象
public boolean isEmpty()判断当前集合是否为空
public int size()返回集合中元素的个数/集合的长度

代码演示:

import java.util.ArrayList;
import java.util.Collection;
public class Test1 {
    public static void main(String[] args) {
        //Collection是一个接口,我们不能直接创建他的对象。
        //所以,现在我们学习他的方法时,只能创建他实现类的对象。
        //实现类:ArrayList
        Collection<String> coll = new ArrayList<>();
        //把给定的对象添加到当前集合中
        coll.add("aaa");
        coll.add("bbb");
        System.out.println(coll);//[aaa, bbb]
        //把给定的对象在当前集合中删除
        coll.remove("aaa");
        System.out.println(coll);//[bbb]
        //返回集合中元素的个数/集合的长度
        System.out.println(coll.size());//1
        //判断当前集合是否为空
        System.out.println(coll.isEmpty());//false
        //清空集合中所有的元素
        coll.clear();
        System.out.println(coll);//[]
        System.out.println(coll.isEmpty());//true
        //判断当前集合中是否包含给定的对象
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        System.out.println(coll);//[aaa, bbb, ccc]
        System.out.println(coll.contains("bbb"));//true
        System.out.println(coll.contains("ddd"));//false
    }
}

注意:

contains方法在底层依赖equals方法判断对象是否一致
如果存的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而object类中equals方法判断的是地址值是否相同,要想判断自定义对象中的内容是否相同,需要在自定义的Javabean类中,重写equals方法
举例:如果同姓名和同年龄,就认为是同一个学生。

代码实现:

测试类:

import java.util.ArrayList;
import java.util.Collection;
public class Test {
    public static void main(String[] args) {
        //举例:如果同姓名和同年龄,就认为是同一个学生。
        Collection<Student> coll = new ArrayList<>();
        Student s1 = new Student("zhangsan", 23);
        coll.add(s1);
        Student s2 = new Student("zhangsan", 23);
        Student s3 = new Student("lisi", 24);
        /* //重写equals方法前比较的是自定义对象的地址值
        //s2和s3是新new出来的,与s1的地址都不同,所以都是false
        System.out.println(coll.contains(s2));//false
        System.out.println(coll.contains(s3));//false*/
        //重写equals方法后,比较的是自定义对象内的属性值
        System.out.println(coll.contains(s2));//true
        System.out.println(coll.contains(s3));//false
    }
}

自定义对象的Javabean类: 

import java.util.Objects;
public class Student {
    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;
    }
    //重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }
}

Collection的遍历方式

迭代器遍历

说明

迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式,不依赖索引进行遍历。

Collection集合获取迭代器 

方法名称说明
Iterator<E> iterator ()

返回迭代器对象

默认指向当前集合的0索引

Iterator中的常用方法

方法名称说明
boolean hasNext()

判断当前位置是否有元素,

有元素返回true,没有元素返回false

E next ()获取当前位置的元素
并将迭代器对象移向下一个位置。
void remove ()删除获取到的元素

代码演示

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test2 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        Iterator<String> it = coll.iterator();
        while (it.hasNext()) {
            String str = it.next();
            System.out.println(str);
        }
        //aaa
        //bbb
        //ccc
    }
}

细节注意点

1,迭代器遍历完毕,指针不会复位,重新遍历该集合时需要重新获取该集合的迭代器对象
2,循环中只能用一次next方法,否则前一个next方法将迭代器对象移向下一个位置时该位置没有元素,后一个next方法获取不到元素就会报错(NoSuchElementException)
3,迭代器遍历时,不能用集合的方法进行增加或者删除,可以用迭代器的方法进行删除

增强for遍历

说明

增强for的底层就是迭代器,为了简化迭代器的代码书写的。
它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
所有的单列集合和数组都能用增强for进行遍历。

格式

for (元素的数据类型 变量名 :数组或者集合){

        具体代码;

}

代码演示

import java.util.ArrayList;
import java.util.Collection;
public class Test3 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        for (String s : coll) {
            System.out.println(s);
        }
        //aaa
        //bbb
        //ccc
    }
}

细节注意点 

上述代码中的s是一个第三方变量,依次代表集合中的每一个数据

对s进行操作不会影响集合中的数据

Lambda表达式遍历

说明

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

方法

方法名称说明
default void forEach(Consumer<? super T> action):结合lambda遍历集合 

代码演示 

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class Test4 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        //匿名内部类
        coll.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //lambda表达式
        coll.forEach(s -> System.out.println(s));
        //aaa
        //bbb
        //ccc
    }
}

到此这篇关于Java 集合 Collection的文章就介绍到这了,更多相关Java 集合 Collection内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Redisson多策略注解限流

    Java Redisson多策略注解限流

    这篇文章主要介绍了Java Redisson多策略注解限流,文章使用Redisson的RRateLimiter进行限流,详细介绍,感兴趣的小伙伴可以参考下面文章内容
    2022-09-09
  • Java方法参数是引用调用还是值调用?

    Java方法参数是引用调用还是值调用?

    Java方法参数是引用调用还是值调用?这是一个值得思考的问题。阅读本文,找出答案
    2016-02-02
  • Java中Arrays.asList()需要注意的坑

    Java中Arrays.asList()需要注意的坑

    在Java中,我们经常需要将数组转换为List来方便地进行操作,Arrays.asList()方法是一种常见的方式,本文主要介绍了Java中Arrays.asList()需要注意的坑,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Java SimpleDateFormat与System类使用示例详解

    Java SimpleDateFormat与System类使用示例详解

    这篇文章主要介绍了Java SimpleDateFormat与System类使用示例,对于SimpleDateFormat类,是一个用来区分区域设置的方式进行日期的是指,以及对日期进行处理分析的一个实现类
    2022-11-11
  • SpringBoot中的统一异常处理详细解析

    SpringBoot中的统一异常处理详细解析

    这篇文章主要介绍了SpringBoot中的统一异常处理详细解析,该注解可以把异常处理器应用到所有控制器,而不是单个控制器,借助该注解,我们可以实现:在独立的某个地方,比如单独一个类,定义一套对各种异常的处理机制,需要的朋友可以参考下
    2024-01-01
  • SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

    SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

    Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器,本文就来详细的介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 深入理解java中for和foreach循环

    深入理解java中for和foreach循环

    下面小编就为大家带来一篇深入理解java中for和foreach循环。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Spring实现文件上传的配置详解

    Spring实现文件上传的配置详解

    这篇文章将为大家详细说明一下spring上传文件如何配置,以及从request请求中解析到文件流的原理,文中示例代码讲解详细,感兴趣的可以了解一下
    2022-08-08
  • SpringBoot环境搭建及第一个程序运行(小白教程)

    SpringBoot环境搭建及第一个程序运行(小白教程)

    这篇文章主要介绍了SpringBoot环境搭建及第一个程序运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • mybatis主从表关联查询,返回对象带有集合属性解析

    mybatis主从表关联查询,返回对象带有集合属性解析

    这篇文章主要介绍了mybatis主从表关联查询,返回对象带有集合属性解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论