关于集合Collection

2023-11-14

集合框架请添加图片描述

概念:

1.Collection是所有集合的顶级接口

2.集合和数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便

3.Collection 下面有多种实现类,因此我们有更多的数据结构可以选择

Collection 的方法 1(单个集合)

通过向上造型,创建了一个集合 “c”,此处以实现类ArrayList为例
在这里插入图片描述
此时输出集合"c"
在这里插入图片描述
输出结果是一个空集合
在这里插入图片描述

1.boolean add(E e)

向当前集合的末尾添加一个元素,成功添加返回true,否则返回false在这里插入图片描述
当调用add()方法向集合中添加元素时,结果为ture,再次输出集合时,原本为空的集合中有了内容"abc"

在这里插入图片描述
在这里插入图片描述

2.int size()

返回当前集合的元素个数在这里插入图片描述
当调用size()方法并打印时,可以得到集合的大小在这里插入图片描述
在这里插入图片描述

3.boolean isEmpty()

判断当前集合是否为空,为空时返回ture,反之返回false
在这里插入图片描述
此时集合中一个元素’abc’所以集合不为空
在这里插入图片描述

4. void clear()

清空当前集合
在这里插入图片描述
当调用clear()方法时会清空当前集合,不需要接收,此时再次输出集合是否为空时,输出结果变为ture

在这里插入图片描述

5. boolean contains(Object o)

判断当前集合中是否包含给定元素,判断依据是看给定元素是否存在与集合元算equals比较结果为true的情况,存在则认为包含
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.boolean remove(Object o)

从集合中删除给定的元素,也是删除与集合中equals比较为true的元素,如果集合中存在多个重复元素,仅删除第一个
在这里插入图片描述
调用remove()方法,如果删除成功返回ture,反之则返回false,此时集合中只有一个"abc"元素,所以第一次调用时返回ture,第二次返回false
在这里插入图片描述
在这里插入图片描述

Collection 的方法 2 (集合间)

此时准备了两个集合并在其中添加元素
在这里插入图片描述

7.boolean addAll(Collection<?extends E>c)

在这里插入图片描述
将给定集合中的所有元素添加到当前集合中,当前集合 发生了改变返回true

1.此时先输出一次集合c,查看了集合c中原有的元素.
2.使用集合c 对象 调用 addAll()方法,将集合c2添加到集合c 中,打印结果为ture,说明添加成功.
3.再次打印集合c.可以发现集合c中涵盖了集合c2与c的所有元素
在这里插入图片描述
在这里插入图片描述

8. boolean containsAll(Collection<?> c)

在这里插入图片描述
判断当前集合是否包含给定集合中的所有元素

此时集合c2中与集合c中有一个元素并不相同,所以输出的结果为false在这里插入图片描述

9.boolean removeAll(Collection<?> c)

在这里插入图片描述
删除当前集合中与给定集合的共有元素

删除了集合c与集合c2共有的元素"abc"与"ab"在这里插入图片描述
在这里插入图片描述

10.集合与数组的转换

1. 将当前集合转换为一个Object类型的数组

在这里插入图片描述
在这里插入图片描述

2.将当前集合转换为指定参数类型的数组

在这里插入图片描述
将当前集合转换为指定参数类型的数组,该方法要求传入一个数组.
如果该数组可用(数组长度>=集合的size)时,会将当前集合元素直接存入到该数组中,然后将数组返回,
如果数组不可用,会创建一个与参数数组同类型并且长度与集合size一致的数组,再将元素存入到数组后返回.
在这里插入图片描述

Collections工具类提供的方法

1.加锁

我们常用的集合实现类:ArrayList,LinkedList,HashSet都是线程不安全的,因此多线程情况下不应当操作他们.
集合的工具类:java.util.Collections 提供了一组静态方法,可以将现有的集合转化为一个并发安全的集合在这里插入图片描述
变成线程并发安全的集合,有返回值 并用原集合接收在这里插入图片描述

2.翻转

提供了一个方法用于翻转List集合的元素
***注意:***只能用于list集合在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

集合的遍历

iterator 迭代器

Collection 提供了一个方法 :Iterator iterator()在这里插入图片描述
迭代器接口中规定了遍历集合元素所需要的相关方法,使用迭代器遍历需要遵循的原则为:问,取,删,其中删除元素不会遍历过程中的必要操作.

问 boolean hasNext()

判断集合中是否还有元素可以迭代,有返回true,没有返回false在这里插入图片描述

这里通过集合c的对象调用iterator()方法,返回了一个迭代器并接收,通过迭代器i调用hasNext()方法,作为循环条件,当有下一个元素时继续遍历,没有下一个元素时,循环终止,通过"问",对集合进行遍历在这里插入图片描述

取 E next()

获取集合下一个元素(第一次调用时是获取下一个元素,以此类推)在这里插入图片描述
这里通过迭代器i去调用next()方法,读取集合中的元素,每调用一次获取下一个元素在这里插入图片描述
在这里插入图片描述

删 void remove()

用迭代器提供的remove方法,对当前遍历到的元素进行删除在这里插入图片描述
在这里插入图片描述
这里"abc"被删除掉了
在这里插入图片描述
注意:
当使用迭代器对集合进行遍历时,使用集合提供的remove()方法会出现报错在这里插入图片描述
在这里插入图片描述

新循环

1.JDK5之后推出了一个特性:增强型for循环,也称为新循环,使得我们可以使用相同的语法遍历集合或数组
2. 新循环也是语法糖,编译器在编译源代码时如果发现使用新循环遍历数组,会将代码改为普通的for循环进行.
***注意:***使用新循环遍历集合会被编译器改为迭代器遍历.因此,使用新循环遍历的过程中,仍然不能通过集合的方法增删元素

语法: for(元素类型 元素名:集合或数组){ 循环体 }
在这里插入图片描述
在这里插入图片描述

lambda表达式

JDK8 之后,集合提供了一个新方法 可以使用lambda表达式遍历集合元素,运行时讲集合的每个元素都顺序传递给lambda表达式中的变量,并执行一次表达式.方法内部是使用新循环实现的
在这里插入图片描述

在这里插入图片描述

泛型

1.泛型也称为参数化类型,允许我们在使用一个类或接口时,通过其定义的泛型来指定其属性,方法的参数或返回值的类型等
2.泛型的类型必须是引用类型,有泛型支持的类或接口在使用时若不确定具体的泛型类型,则默认为原型的Object
3.迭代器接口也支持泛型
泛型属于语法糖,编译器在编译时会根据泛型指定的类型补全造型的代码
在这里插入图片描述

Collecion 的两个常见接口

1.java.util.List

List继承自Collection,是集合中常用的一个子类型
特点:可以存放重复元素 且有序,并提供了一套通过下标操作元素的方法
(重复元素的判定是依靠元素自身的equals方法比较的结果而定,为true就认为是重复元素.)

List 提供的方法

1.void add(int index,E element)

将元素添加到指定下标,后续元素相继后移.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.E remove(int index)

将指定下标元素删除,返回删除掉的元素
在这里插入图片描述
在这里插入图片描述

3. E get(int index)

获取指定下标的元素并返回
在这里插入图片描述
在这里插入图片描述

4.E set(int index,E element)

将给定元素设置到指定位置,并返回原有元素
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将数组转换为集合

List asList(T… a)

数组工具类 Arrays 提供了一个静态方法 可以将一个数组转换为一个List集合
在这里插入图片描述
此处准备了一个数组array,通过调用asList()方法将数组转换并用一个集合接收在这里插入图片描述
在这里插入图片描述
***注意:***通过数组转换而来的集合,对该集合的操作就是对源数组的操作(我认为是因为集合没有通过new去开辟新空间,而是通过赋值的方式得到了数组的对象)
由于数组是定长的,因此从数组转换而来的集合不可以调用增删元素等会影响数组长度的操作,否则会抛出异常
如果向向集合中增删元素,需要自行创建一个集合,然后将原集合的元素导入到该集合中即可.
所有的集合都支持一个参数类型为Collection的构造方法,作用是在创建当前集合的同时包含给定集合中的所有元素
在这里插入图片描述
在这里插入图片描述

List常见的实现类:

1.java.util.ArrayList

内部使用数组实现,查询性能更好

2.2.java.util.LinkedList

内部使用链表实现,增删元素性能更好,首尾增删元素性能最佳

2.2.java.util.Set

1.不可以保存重复元素

Set 常见的实现类:

1.java.util.HashSet

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于集合Collection 的相关文章

随机推荐

  • 从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

    系列文章目录 内容 链接 从Vue2到Vue3 零 Vue3简介 从Vue2到Vue3 一 Composition API 第一章 从Vue2到Vue3 二 Composition API 第二章 从Vue2到Vue3 三 Composit
  • 前端缓存区别记录 SessionStorage和LocalStorage详解

    LocalStorage和SessionStorage之间的主要区别在于浏览器窗口和选项卡之间的数据共享方式不同 LocalStorage可跨浏览器窗口和选项卡间共享 就是说如果在多个选项卡和窗口中打开了一个应用程序 而一旦在其中一个选项卡
  • spi个人笔记

    spi是全双工通讯 收发同时进行 这句话怎么理解 如上图所示 主机产生一组时钟信号 并通过mosi输出8位数据 这个时候 虽然从机没有返回数据 持续低电平 但是因为是 收发同步 所以此时主机已经采集了此次的miso数据 就是说 无论你的目的
  • 【upload-labs 第四关通关攻略】

    一 类型 无法上传php等多种类型 选择 htaccess配置文件 二 htaccess内容 注意 不能命名 就叫 htaccess
  • Java手写数组和案例拓展

    Java手写数组和案例拓展 1 Mermanid代码绘制的思维导图解释实现思路原理 mermaid svg HoH3kyfEhPDhcUh4 font family trebuchet ms verdana arial sans serif
  • js发布——订阅模式的通用实现及取消订阅

    h1 发布 订阅模式的通用实现 h1 p javaScript作为一门解释执行的语言 给对象添加动态职责是理所当然的 所以我们将发布 订阅的功能提取出来 放在一个单独的对象内 p
  • Javascript创建对象的几种方式及优劣

    1 字面量方式 var obj name tom age 20 career network getName function return this name alert obj getName 这种方式适合创建单个对象 2 创建Obje
  • HttpCanary使用指南——各种神奇的插件

    HttpCanary更多资料 点我 作为目前Android平台最强大的抓包工具 HttpCanary从设计之初就规划了插件功能 2 6 0版本之前称为 模组 基于NetBare框架的虚拟网关 拦截器设计 HttpCanary可以实现非常多的
  • 2020春秋招聘图像处理 人工智能方向 各大厂面试常见题整理一(附答案)(阿里腾讯华为字节)

    因为本人近期也要紧临毕业 面临招聘面试 所以整体别人公开的面经 做一个整理 并且加上自己认为的答案 欢迎各位读者对答案进行指正和交流 深度残差的作用 直观上 深度加深 出现梯度消失和梯度爆炸的问题 在论文中 出现了一个奇怪的现象 就是56层
  • Hive命令的使用

    命令行界面 Command Line Interface CLI 是Hive交互最常见也是最方便的方式 在命令行界面可以执行Hive支持的觉大多数功能 如查询 创建等 hive e 有时 并不需要一直打开命令行界面 也就是说执行完查询后立刻
  • Vue-ref用法

    用ref操作模版中的dom元素 1 在模版中 声明ref名称 div ref引用Dom节点 div 2 用法 change this refs chagneBack style color red 用ref操作组件 1 在组件引用中声明re
  • Redis 汇总

    Redis 0 声明 1 概述 1 1 Redis是什么 1 2 Redis优缺点 1 3 为什么要用 Redis 为什么要用缓存 1 4 Redis为什么这么快 2 常用数据结构 2 1 String 应用场景 2 2 List 应用场景
  • Jetpack Compose多平台用于Android和IOS

    JetBrains和外部开源贡献者已经努力工作了几年时间来开发Compose Multiplatform 并最近发布了适用于iOS的Alpha版本 自然地 我们对其功能进行了测试 并决定通过使用该框架在iOS上运行我们的Dribbble复制
  • Matlab中求数据概率分布的方法

    一 问题描述 对已有的一些列数据进行分析 想得到该数据的分布和统计特性 如概率密度函数 概率分布 累计概率密度等等 例如 已有一段时间的声音测量数据 求该数据的分布特性 并给出噪声的95 置信区间统计参数以表征该声音监测数据的总体水平 二
  • HTTP响应的结构是怎么样的?

    HTTP响应由三部分组成 状态行 响应头 响应正文 状态行 包括协议版本的Version 状态码 Status Code 回应短语 响应头 包括搭建服务器的软件 发送响应的时间 回应数据的格式等信息 响应正文 就是响应的具体数据 HTTP请
  • PROJ.4学习——初识PROJ

    PROJ 4介绍 初始认识 前言 PROJ是一个通用的坐标转换软件 它将地理空间坐标从一个坐标系转换为另一个坐标系 这包括地图投影和大地坐标变换 PROJ包含命令行应用程序 可以方便地从文本文件或直接从用户输入转换坐标 除了命令行实用程序之
  • eclipse安装教程(2021最新版)超级易懂到吐血

    第一步 下载JDK 下载地址 http www oracle com technetwork java javase downloads index html 第二步 根据自己电脑的系统 选择相应的版本x64代表64位 x86代表32位 点
  • 螺杆真空泵安装流程图_螺杆式真空泵基本知识送给刚入行的新朋友

    螺杆式真空泵是容积式真空泵中的新兴成员 出现于上世纪90年代前后 发展较晚 但作为一种理想干泵 螺杆式真空泵在面世后获得了快速发展 现在就跟小编去了解一下它的基本知识吧 一 螺杆式真空泵特点 螺杆式真空泵脱胎于螺杆式压缩机与螺杆液体输送泵
  • 精英反向与二次插值改进的黏菌算法-附代码

    精英反向与二次插值改进的黏菌算法 文章目录 精英反向与二次插值改进的黏菌算法 1 黏菌算法 2 改进黏菌算法 2 1 精英反向学习机制 2 2 二次插值方法 3 实验结果 4 参考文献 5 Matlab代码 6 python代码 摘要 针对
  • 关于集合Collection

    集合框架 概念 1 Collection是所有集合的顶级接口 2 集合和数组一样 可以保存一组元素 并且提供了操作元素的相关方法 使用更方便 3 Collection 下面有多种实现类 因此我们有更多的数据结构可以选择 Collection