Java集合Collection与List实例详解

 更新时间:2026年05月11日 10:00:17   作者:Kiling_0704  
文章主要讲解了Java Collection单列集合的基础知识,包括Collection接口及其子接口List和Set的特点与实现类,常用方法以及遍历方式,如迭代器、增强for循环、forEach方法,并通过代码实例展示了如何遍历存储自定义对象的集合,感兴趣的朋友一起看看吧

一、集合概述和分类

1.1 集合的分类

同学们,前面我们已经学习过了ArrayList集合,它是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。为了满足不同的业务场景需求,除了ArrayList集合以外,Java还提供了很多种其他的集合,如下图所示:

我想你的第一感觉是这些集合好多呀!但是,我们学习时会对这些集合进行分类学习,如下图所示:一类是单列集合元素是一个一个的,另一类是双列集合元素是一对一对的。

在今天的课程中,主要学习Collection单列集合。Collection是单列集合的根接口,也称之为顶层接口,Collection接口下面又有两个子接口List接口、Set接口,List和Set下面分别有不同的实现类,如下图所示:

上图中各种集合的特点如下图所示:

可以自己写代码验证一下,各种集合的特点

public class CollectionTest1 {
    public static void main(String[] args) {
        // 简单确认一下Collection集合的特点
        Collection<String> list1 = new ArrayList<>(); //存取顺序一致,可以重复,有索引
        list1.add("java1");
        list1.add("java2");
        list1.add("java1");
        list1.add("java2");
        System.out.println(list1); //[java1, java2, java1, java2]
​
        Collection<String> list2 = new HashSet<>(); //存取顺序不一致,不重复,无索引
        list2.add("java1");
        list2.add("java2");
        list2.add("java1");
        list2.add("java2");
        list2.add("java3");
        System.out.println(list2); //[java3, java2, java1]
    }
}

总结:
1. 单列集合的代表是谁?双列集合的代表是谁?
    Collection、Map​
2. Collection集合有哪两大常用的集合体系,各自有啥特点?
    List系列集合:添加的元素是有序、可重复、有索引。
    Set系列集合:添加的元素是无序、不重复、无索引。

1.2 Collection集合的常用方法

接下来,我们学习一下Collection集合的一些常用方法,这些方法所有Collection实现类都可以使用。 这里我们以创建ArrayList为例,来演示

public class CollectionTest2 {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        // 添加元素到集合
        c.add("java1");
        c.add("java1");
        c.add("java2");
        c.add("java2");
        c.add("java3");
        System.out.println(c); //打印: [java1, java1, java2, java2, java3]
​
        // 获取集合的大小
        System.out.println(c.size()); //5
​
        // 判断集合中是否包含某个元素
        System.out.println(c.contains("java1")); //true
        System.out.println(c.contains("Java1")); //false
​
        // 删除某个元素,如果有多个重复元素只能删除第一个
        System.out.println(c.remove("java1")); //true
        System.out.println(c); //打印: [java1,java2, java2, java3]
​
        // 清空集合的元素
        c.clear();
        System.out.println(c); //打印:[]
​
        // 判断集合是否为空 是空返回true 反之返回false
        System.out.println(c.isEmpty()); //true
​
        // 把集合转换为数组
        Object[] array = c.toArray();
        System.out.println(Arrays.toString(array)); //[java1,java2, java2, java3]
​
        // 如果想把集合转换为指定类型的数组,可以使用下面的代码
        String[] array1 = c.toArray(new String[c.size()]);
        System.out.println(Arrays.toString(array1)); //[java1,java2, java2, java3]
​
        // 还可以把一个集合中的元素,添加到另一个集合中
        Collection<String> c1 = new ArrayList<>();
        c1.add("java1");
        c1.add("java2");
        Collection<String> c2 = new ArrayList<>();
        c2.add("java3");
        c2.add("java4");
        c1.addAll(c2); //把c2集合中的全部元素,添加到c1集合中去
        System.out.println(c1); //[java1, java2, java3, java4]
    }
}

最后,我们总结一下Collection集合的常用功能有哪些,ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet集合都可以调用下面的方法。

二、Collection遍历方式

各位同学,接下来我们学习一下Collection集合的遍历方式。有同学说:“集合的遍历之前不是学过吗?就用普通的for循环啊? “ 没错!之前是学过集合遍历,但是之前学习过的遍历方式,只能遍历List集合,不能遍历Set集合,因为以前的普通for循环遍历需要索引,只有List集合有索引,而Set集合没有索引。

所以我们需要有一种通用的遍历方式,能够遍历所有集合。

2.1 迭代器遍历集合

接下来学习的迭代器就是一种集合的通用遍历方式。就是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator

代码写法如下:

public class CollectionTest3 {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("赵敏");
        c.add("小昭");
        c.add("素素");
        c.add("灭绝");
        System.out.println(c); // [赵敏, 小昭, 素素, 灭绝]
​
        // 第一步:先获取迭代器对象
        // 解释:Iterator就是迭代器对象,用于遍历集合的工具
        Iterator<String> it = c.iterator();
​
        // 第二步:判断当前位置是否有元素可以获取
        // 解释:hasNext()方法返回true,说明有元素可以获取;反之没有
        while(it.hasNext()){
            // 第三步:获取当前位置的元素,然后自动指向下一个元素.
            String e = it.next();
            System.out.println(e);
        }
    }
}

迭代器代码的原理如下:

  • 当调用iterator()方法获取迭代器时,当前指向第一个元素
  • hasNext()方法则判断这个位置是否有元素,如果有则返回true,进入循环
  • 调用next()方法获取元素,并将当前元素指向下一个位置,
  • 等下次循环时,则获取下一个元素,依此内推

最后,我们再总结一下,使用迭代器遍历集合用到哪些方法

2.2 增强for遍历集合

同学们刚才我们学习了迭代器遍历集合,但是这个代码其实还有一种更加简化的写法,叫做增强for循环。

格式如下:

需要注意的是,增强for不光可以遍历集合,还可以遍历数组。接下来我们用代码演示一下:

public class CollectionTest4 {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("赵敏");
        c.add("小昭");
        c.add("素素");
        c.add("灭绝");
        System.out.println(c); // [赵敏, 小昭, 素素, 灭绝]
​
        // 1.使用增强for遍历集合
        for(String s: c){
            System.out.println(s);
        }
​
        System.out.println("----------------------");
​
        // 2.再尝试使用增强for遍历数组
        String[] arr = {"迪丽热巴", "古力娜扎", "稀奇哈哈"};
        for(String name: arr){
            System.out.println(name);
        }
    }
}

2.3 forEach遍历集合

在JDK8版本以后还提供了一个forEach方法也可以遍历集合,如果下图所示:

我们发现forEach方法的参数是一个Consumer接口,而Consumer是一个函数式接口,所以可以传递Lambda表达式

public class CollectionTest5 {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("赵敏");
        c.add("小昭");
        c.add("素素");
        c.add("灭绝");
        System.out.println(c); // [赵敏, 小昭, 素素, 灭绝]
        // 调用forEach方法
        // 由于参数是一个Consumer接口,所以可以传递匿名内部类
        c.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        System.out.println("---------------------");
​
        // 也可以使用lambda表达式对匿名内部类进行简化
        c.forEach(s -> System.out.println(s)); // [赵敏, 小昭, 素素, 灭绝]
    }
}

2.4 遍历集合案例

接下来,我们看一个案例,在集合中存储自定义的对象,并遍历。具体要求如下

首先,我们得写一个电影类,用来描述每一步电影应该有哪些信息。

public class Movie{
    private String name; // 电影名称
    private double score; // 评分
    private String actor; // 演员
    // 无参数构造方法
    public Movie(){}
    // 全参数构造方法
    public Movie(String name, double score, String actor){
        this.name=name;
        this.score=score;
        this.actor=actor;
    }
    //...get、set、toString()方法自己补上..
}

接着,再创建一个测试类,完成上面的需求

public class CollectionDemo {
    public static void main(String[] args) {
        Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("《肖申克的救赎》", 9.7, "罗宾斯"));
        movies.add(new Movie("《霸王别姬》", 9.6, "张国荣、张丰毅"));
        movies.add(new Movie("《阿甘正传》", 9.5, "汤姆汉克斯"));
        for(Movie movie : movies){
            System.out.println("电影名:" + movie.getName());
            System.out.println("评分:" + movie.getScore());
            System.out.println("主演:" + movie.getActor());
            System.out.println("--------------------");
        }
    }
}

以上代码的内存原理如下图所示:当往集合中存对象时,实际上存储的是对象的地址值

总结:
1、如何获取集合的迭代器对象? 
    Iterator<E> iterator():获取集合对应的迭代器,用来遍历集合中的元素的。
2、增强for可以遍历哪些容器?
    既可以遍历集合也可以遍历数组
3、增强for的关键是记住它的遍历格式,它的具体格式是什么样的?
    for(元素的数据类型 变量名 : 数组或者集合){
        // 在此处使用变量即可, 该变量就是元素
    }
4、集合中存储的是元素的什么信息?
    集合中存储的是元素对象的地址

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

相关文章

  • Java 中Object的wait() notify() notifyAll()方法使用

    Java 中Object的wait() notify() notifyAll()方法使用

    这篇文章主要介绍了Java 中Object的wait() notify() notifyAll()方法使用的相关资料,需要的朋友可以参考下
    2017-05-05
  • spring boot利用docker构建gradle项目的实现步骤

    spring boot利用docker构建gradle项目的实现步骤

    这篇文章主要给大家介绍了关于spring boot利用docker构建gradle项目的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • redis分布式锁RedissonLock的实现细节解析

    redis分布式锁RedissonLock的实现细节解析

    这篇文章主要介绍了redis分布式锁RedissonLock的实现细节解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Sentinel Dashboard限流规则保存方式

    Sentinel Dashboard限流规则保存方式

    这篇文章主要介绍了Sentinel Dashboard限流规则保存方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 如何手写一个Spring Boot Starter

    如何手写一个Spring Boot Starter

    这篇文章主要介绍了如何手写一个Spring Boot Starter,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • springBoot使用JdbcTemplate代码实例

    springBoot使用JdbcTemplate代码实例

    这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • spring boot 若依系统整合Ueditor部署时上传图片错误问题

    spring boot 若依系统整合Ueditor部署时上传图片错误问题

    这篇文章主要介绍了spring boot 若依系统整合Ueditor部署时上传图片错误问题,本文给大家分享问题解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java对称加密工作模式原理详解

    Java对称加密工作模式原理详解

    这篇文章主要介绍了Java对称加密工作模式原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • SpringBoot YAML语法基础详细整理

    SpringBoot YAML语法基础详细整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Springboot Mybatis使用pageHelper如何实现分页查询

    Springboot Mybatis使用pageHelper如何实现分页查询

    这篇文章主要介绍了Springboot Mybatis使用pageHelper如何实现分页查询问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论