Code Ease Code Ease
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档

神秘的鱼仔

你会累是因为你在走上坡路
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档
服务器
  • Java核心基础

    • 基础篇

    • 集合类

      • Collection接口的特点与理解
        • (一)概述
        • (二)集合的特点与好处
        • (三)集合的划分
        • (四)Collection接口的特点
        • (五)Collection的常用方法
        • (六)Collection和Collections的区别
        • (七)总结
      • Set接口及源码分析
      • Map接口及源码分析
      • List接口及源码分析
      • ConcurrentHashMap的底层原理分析
    • JVM虚拟机

    • Java并发

  • 框架的艺术

  • 分布式与微服务

  • 开发经验大全

  • 版本新特性

  • Java
  • Java核心基础
  • 集合类
CodeEase
2023-11-11
目录

Collection接口的特点与理解

作者:鱼仔
博客首页: codeease.top (opens new window)
公众号:Java鱼仔

# (一)概述

java集合是写代码时经常用到,面试时经常问到的一项基础知识。因此了解深入了解集合不管对写代码,或者是面试都有很大的帮助。作为一名合格的java程序员,你需要了解以下关于集合的知识:

  1. 集合的框架体系
  2. Collection接口的特点和使用
  3. List和Set接口的特点和使用
  4. List接口和Set接口的实现类学习
  5. Map接口的特点和使用
  6. Map接口的实现类学习
  7. Collections工具类的使用

集合的学习方向也分成两方面:

  1. 应用层面
  2. 理解层面

应用层面就是对集合的使用,比较简单。理解层面就相对来说比较复杂,需要看一些集合的源码,了解其中的底层实现逻辑。理解之后要能说出各个集合之间的对比,比如:

  1. Collection和Map的对比
  2. List和Set的对比
  3. ArrayList和Vector对比
  4. ArrayList和LinkedList对比
  5. HashMap和HashTable对比
  6. Collection和Collections对比 ......

# (二)集合的特点与好处

说到集合肯定就会想到数组,因为两者都是用来保存一组数据。但是在用数组保存数据(尤其是对象)时存在一些弊端:

  1. 数组的长度必须提前指定,并且该数组的长度不能修改
  2. 数组只能保存相同类型的元素。

相比之下,集合就不具备上面的弊端:

  1. 集合在使用时不用指定长度,可以实现自动扩容
  2. 集合在没有指定泛型时,保存的对象是Object类型,指定泛型后可以保存对应的类型。

数组比较适合保存基本类型的元素,集合适合保存引用类型的元素,即对象。

# (三)集合的划分

集合主要分为两大块体系:Collection和Map。Collection保存单列的元素,Map保存双列的元素(键值对)

Collection接口:

  1. Set:元素无序不可重复
  2. List:元素有序可重复

Map接口:

  1. Key-Value键值对集合
  2. Collection接口的继承树如下所示:

1-1.png

Map接口的继承树如下所示

1-2.png

# (四)Collection接口的特点

Collection接口没有自己的实现类,具体的实现类都在他的子接口中,如List和Set。Collection中提供了一系列操作集合的方法,比如增加、删除等等,对于Collection中提供的方法,可以在官方文档中查阅(java PlatForm SE 8)

1-3.png

# (五)Collection的常用方法

Collection提供的方法并不多,这里介绍一下常用的几个:

public class TestMethod {
    public static void main(String[] args) {
        //创建collection子接口的对象,这里用ArrayList
        Collection collection=new ArrayList();
        
        //method1.add
        collection.add("zhangsan");
        collection.add(18);
        System.out.println(collection);
        
        //method2.addall
        Collection collection2=new ArrayList();
        collection2.addAll(collection);
        System.out.println(collection2);
        
        //method3.contains
        boolean contains = collection.contains(18);
        System.out.println(contains);
        
        //method4.containsAll
        boolean containsall = collection.containsAll(collection2);
        System.out.println(containsall);
        
        //method5.isEmpty
        System.out.println(collection.isEmpty());
        
        //method6.remove
        collection.remove(18);
        System.out.println(collection);
        
        //method7.size
        System.out.println(collection.size());
        
        //method8.clear
        collection.clear();
        System.out.println(collection);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

需要注意的是Collection的遍历,Collection继承了Iterable接口,使得它可以通过迭代器来遍历元素。迭代器的遍历有三步:

Collection collection=new ArrayList();
collection.add("zhangsan");
collection.add(18);
collection.add("lisi");
//1.获取迭代器对象,此时迭代器指向集合最上面元素的上一位
Iterator iterator=collection.iterator();
//2.使用hasNext()判断下一位还有没有对象
while (iterator.hasNext()){
//3.使用next()遍历
    System.out.println(iterator.next());
}
1
2
3
4
5
6
7
8
9
10
11

为了简化语法也可以用增强for遍历集合,增强for本质上就是迭代器

for (Object o:collection){
    System.out.println(o);
}
1
2
3

在迭代过程中。不能通过集合的remove去删除对象集合,不然就会报ConcurrentModificationException错误。如果一定要在迭代中删除元素,建议使用迭代器自带的remove方法删除。

# (六)Collection和Collections的区别

Collection是一个接口,Collections是操作List、Set、Map的工具类。

Collections中提供了一系列静态的方法对集合进行操作,常见的排序操作:

  1. reverse(List):反转List
  2. shuffle(List):对List进行随机排序
  3. sort(List):按自然顺序对List集合进行升序排序
  4. swap(List,int,int):交换List元素两个位置的元素
public class CollectionsTest1 {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        System.out.println("原始:"+list);
        Collections.reverse(list);
        System.out.println("resverse:"+list);
        Collections.shuffle(list);
        System.out.println("shuffle:"+list);
        Collections.sort(list);
        System.out.println("sort:"+list);
        Collections.swap(list,0,3);
        System.out.println("swap:"+list);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

查找、替换操作:

  1. Object max(Collection):取出最大值
  2. Object max(Collection,Comparator):按Comparator定制的条件取出最大值
  3. Object min(Collection):取出最小值
  4. Object min(Collection,Comparator)按Comparator定制的条件取出最小值
  5. int frequency(Collection,Object):出现频率
  6. void copy(List dest,List src):复制集合
  7. boolean replaceAll(List list,Object oldVal,Object newVal):替换所有对象
public class CollectionsTest2 {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        String max = (String) Collections.max(list);
        System.out.println("max:"+max);
        String min = (String) Collections.min(list);
        System.out.println("min:"+min);
        int frequency = Collections.frequency(list, "a");
        System.out.println("frequency:"+frequency);
        List list2=new ArrayList(Arrays.asList(new Object[list.size()]));
        Collections.copy(list2,list);
        System.out.println("copy:"+list2);
        Collections.replaceAll(list,"a","b");
        System.out.println("replaceAll:"+list);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# (七)总结

虽然在工作中集合的使用很简单,但是集合的原理一定要很扎实的掌握。集合的源码不算很难,因此看懂集合的部分源代码不仅更加深刻理解java有帮助,而且在面试中也能轻易过了集合这一关。

上次更新: 2025/04/29, 17:22:06
javaIO之字节流与字符流
Set接口及源码分析

← javaIO之字节流与字符流 Set接口及源码分析→

最近更新
01
AI大模型部署指南
02-18
02
半个月了,DeepSeek为什么还是服务不可用
02-13
03
Python3.9及3.10安装文档
01-23
更多文章>
Theme by Vdoing | Copyright © 2023-2025 备案图标 浙公网安备33021202002405 | 浙ICP备2023040452号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式