当前位置: 首页 > news >正文

Java集合概述(Collection集合)

目录

      • 集合
        • 一、集合与数组
        • 二、集合类体系结构
        • 三、泛型(约定集合存储数据类型)
        • 四、Collection集合常用API
        • 五、Collection集合的遍历方式
          • 5.1 迭代器遍历
          • 5.2 增强for循环(for each):
          • 5.3 lambda表达式
        • 六、Collection集合存储自定义类型的对象
        • 七、常见数据结构

集合

一、集合与数组

数组的特点:数组定义完成并启动后,类型确定、长度固定。

因此,在进行增删操作的时候,数组是不太合适的,可能需要放弃原有数组或者移位

弊端:

  • 不适合元素的个数和类型不确定的业务场景
  • 不适合做需要增删数据操作
  • 数组的功能也比较的单一,处理数据的能力并不是很强大

因此,引入了集合。

集合是java中存储对象数据的一种容器

集合的特点:集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。

优势:

  • 集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。
  • 同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。

总结:

  1. 数组和集合的元素存储的个数问题。
    • 数组定义后类型确定,长度固定
    • 集合类型可以不固定,大小是可变的。
  2. 数组和集合存储元素的类型问题。
    • 数组可以存储基本类型和引用类型的数据。
    • 集合只能存储引用数据类型的数据。
  3. 数组和集合适合的场景
    • 数组适合做数据个数和类型确定的场景。
    • 集合适合做数据个数不确定,且要做增删元素的场景,集合种类更多,功能更强大。

二、集合类体系结构

集合:

  • Collection单列集合,每个元素(数据)只包含一个值。
  • Map双列集合,每个元素包含两个值(键值对)。

在这里插入图片描述

Collection集合特点

  • List系列集合:添加的元素是有序、可重复、有索引。
    • ArrayList、LinekdList :有序、可重复、有索引。
  • Set系列集合:添加的元素是无序、不重复、无索引。
    • HashSet: 无序、不重复、无索引
    • LinkedHashSet: 有序、不重复、无索引。
    • TreeSet:按照大小默认升序排序、不重复、无索引。
public class CollectionDemo1 {public static void main(String[] args) {//有序 可重复 有索引Collection list=new ArrayList<>();list.add("Java");list.add("Java");list.add("Mybatis");list.add(12);list.add(12);list.add(false);list.add(false);System.out.println(list);//[Java, Java, Mybatis, 12, 12, false, false]//无序 不重复 无索引Collection list1=new HashSet();list1.add("Java");list1.add("Java");list1.add("Mybatis");list1.add(12);list1.add(12);list1.add(false);list1.add(false);System.out.println(list1);//[Java, false, 12, Mybatis]}
}

三、泛型(约定集合存储数据类型)

集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型

Collection<String> lists = new ArrayList<String>();
Collection<String> lists = new ArrayList<>(); // JDK 7开始后面的泛型类型申明可以省略不写

注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

//Collection<int> lists = new ArrayList<>(); 错误写法

如果集合中要存储基本类型的数据怎么办?

// 存储基本类型使用包装类
Collection<Integer> lists1 = new ArrayList<>();
Collection<Double> lists2 = new ArrayList<>();

四、Collection集合常用API

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
在这里插入图片描述

五、Collection集合的遍历方式

方式一:迭代器
方式二:foreach/增强for循环
方式三:lambda表达式

5.1 迭代器遍历

迭代器遍历概述

  • 遍历就是一个一个的把容器中的元素访问一遍。
  • 迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式
public static void main(String[] args) {Collection<String> list=new ArrayList<>();list.add("String1");list.add("String2");list.add("String3");list.add("String4");System.out.println(list);//[String1, String2, String3, String4]//1.得到当前集合的迭代器对象Iterator<String> i= list.iterator();//2.定义while循环while (i.hasNext()){String element=i.next();System.out.println(element);}}
  • Collection集合获取迭代器
    • Iterator iterator():返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引
  • Iterator中的常用方法
    • boolean hasNext():询问当前位置是否有元素存在,存在返回true ,不存在返回false
    • E next():获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界

迭代器如果取元素越界会出现什么问题

会出现NoSuchElementException异常

5.2 增强for循环(for each):

既可以遍历集合也可以遍历数组。
它是JDK5之后出现的,其内部原理是一个lterator迭代器,遍历集合相当于是迭代器的简化写法。
实现Iterable接口的类才可以使用迭代器和增强for,Collection接口已经实现了lterable接口。

格式:

for(元素数据类型 变量名 : 数组或者Collection集合) {//在此处使用变量即可,该变量就是元素
}

例子

public static void main(String[] args) {Collection<String> list=new ArrayList<>();list.add("String1");list.add("String2");list.add("String3");list.add("String4");System.out.println(list);//[String1, String2, String3, String4]//foreach 进行遍历for (String element:list) {System.out.println(element);}        }
5.3 lambda表达式

Collection结合Lambda遍历的API:
default void forEach(Consumer<? super T> action): 结合lambda遍历集合

    public static void main(String[] args) {Collection<String> list=new ArrayList<>();list.add("String1");list.add("String2");list.add("String3");list.add("String4");System.out.println(list);//[String1, String2, String3, String4]//forEach 内部类list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});//ForEach lambda表达式list.forEach((String s)->{System.out.println(s);});//ForEach lambda表达式简化list.forEach(s->System.out.println(s));}

ForEach方法的底层代码:通过增强for实现

default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}

六、Collection集合存储自定义类型的对象

案列需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来
分析

  1. 定义一个电影类
public class Movie {private String name;private double score;private String actor;public Movie(String name, double score, String actor) {this.name = name;this.score = score;this.actor = actor;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}
}
  1. 定义一个集合存储电影对象。
  2. 创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
  3. 遍历集合中的3个对象,输出相关信息。
public class TestDemo {public static void main(String[] args) {//定义一个集合存储电影对象。Collection<Movie> movies=new ArrayList<>();//创建3个电影对象,封装相关数据,把3个对象存入到集合中去。movies.add(new Movie("《肖生克的救赎》", 9.7 ,  "罗宾斯"));movies.add(new Movie("《霸王别姬》", 9.6 ,  "张国荣、张丰毅"));movies.add(new Movie("《阿甘正传》", 9.5 ,  "汤姆.汉克斯"));//遍历集合中的3个对象,输出相关信息。for (Movie m:movies) {System.out.println("片名"+m.getName());System.out.println("评分"+m.getScore());System.out.println("导演"+m.getActor());}}
}

在这里插入图片描述

集合中存储的是元素的什么信息?

集合中存储的是元素对象的地址。

七、常见数据结构

  • 队列:先进先出,后进后出。
  • 栈:后进先出,先进后出。
  • 数组:内存连续区域,查询快,增删慢。
  • 链表:元素是游离的,查询慢,首尾操作极快。
  • 二叉树:永远只有一个根节点, 每个结点不超过2个子节点的树。
  • 查找二叉树:小的左边,大的右边,但是可能树很高,查询性能变差。
  • 平衡查找二叉树:让树的高度差不大于1,增删改查都提高了。
  • 红黑树(就是基于红黑规则实现了自平衡的排序二叉树)

相关文章:

Java集合概述(Collection集合)

目录集合一、集合与数组二、集合类体系结构三、泛型(约定集合存储数据类型)四、Collection集合常用API五、Collection集合的遍历方式5.1 迭代器遍历5.2 增强for循环(for each):5.3 lambda表达式六、Collection集合存储自定义类型的对象七、常见数据结构集合 一、集合与数组 数…...

运动无线蓝牙耳机哪款好、运动无线蓝牙耳机推荐

作为 运动爱好者&#xff0c;每天早晨醒来后的第一件事就去家门口的湿地公园跑上一圈。各种运动装备都齐了&#xff0c;不过在耳机选择上还真的犯难&#xff0c;打着“运动耳机”旗号的产品也是种类繁多&#xff0c;那么到底什么样的无线耳机更适合运动呢&#xff1f;于是我花时…...

解决AAC音频编码时间戳的计算问题

1.主题音频是流式数据&#xff0c;并不像视频一样有P帧和B帧的概念。就像砌墙一样&#xff0c;咔咔往上摞就行了。一般来说&#xff0c;AAC编码中生成文件这一步&#xff0c;如果使用的是OutputStream流写入文件的话&#xff0c;就完全不需要计算时间。但在音视频同步或者使用A…...

Android 9.0 添加自定义开机广播

1.概述 在9.0的系统rom定制化开发中,由于系统开机广播接收受限,普通app接收不到这个广播,如果接收这个广播很多应用 感觉要好久收到这个广播, 所以需要自定义开机广播来使用自定义广播开启某些应用,实现自己的功能,接下来就需要分析下开机广播的流程,然后增加自定义广播…...

第四阶段10-添加类别,类别列表mapper层,service层,controller层

63. 添加类别–Mapper层 插入类别数据的功能此前已经完成&#xff01; 64. 添加类别–Service层 在项目的根包下创建pojo.dto.CategoryAddNewDTO类&#xff1a; Data public class CategoryAddNewDTO implements Serializable {/*** 类别名称*/private String name;/*** 父…...

linux内核启动分析(一)

文章目录1.HEAD1.preserve_boot_args1.1 __inval_dcache_area2.el2_setup3. set_cpu_boot_mode_flag4. __create_page_tables4.1map_memory5. __cpu_setup6. __primary_switch6.1 __enable_mmu6.2 __primary_switched最近工作中经常使用飞腾E2000的开发版&#xff0c;也遇到一些…...

wireshark常见使用操作讲解以及几个故障解决案例分享

&#xff08;1&#xff09;网卡选择 对于电脑本身有多个网卡的时候&#xff0c;选择网卡就成为了一个困惑的地方&#xff0c;其实这里很简单&#xff0c;只要把鼠标放在对应的网卡上面就可以看到地址等信息&#xff0c;就容易判断出来了。 &#xff08;2&#xff09;过滤器 直…...

利用逻辑分析仪解析串口通讯数据

利用逻辑分析仪解析串口通讯数据&#x1f527;采用的是市面上最为广泛使用的USB逻辑分析仪: &#x1f4da;资料下载&#xff1a; 链接: https://pan.baidu.com/s/1c9lwWDbtJxaJED-kzSbiJg 提取码: 5vnr&#x1f528;测试工具为&#xff1a;Logic 2.4.6&#xff0c;也可以使用Pu…...

新整理的前端面试题

pinia和vuex的区别&#xff08;1&#xff09;pinia它没有mutation,他只有state&#xff0c;getters&#xff0c;action【同步、异步】使用他来修改state数据&#xff08;2&#xff09;pinia他默认也是存入内存中&#xff0c;如果需要使用本地存储&#xff0c;在配置上比vuex麻烦…...

数据仓库-数仓分层

层级 全拼 职责划分 ODS(源数据层) Operational DataStore ODS层存储最原始的数据&#xff0c; 对数据不做任何加工处理&#xff1b; 源数据主要来自业务数据库和日志&#xff0c;这些数据是用户操作业务系统产生&#xff0c;所以叫操作型数据(Operational Data) 。 DWD(…...

【Linux】Linux根文件系统扩容

场景&#xff1a;根文件系统需要至少100GB的剩余空间&#xff0c;但是目前就剩余91GB。因此&#xff0c;我们需要对根文件系统进行扩容。# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 3.9G 0 3.9G 0% /dev tmpfs …...

RPC编程:Hessian RPC一个老的RPC框架(一)

RPC编程&#xff1a;Hessian RPC一个老的RPC框架一&#xff1a;Hessian RPC1&#xff1a;Hession RPC一个老的RPC框架2&#xff1a;老&#xff0c;为什么还要研究&#xff1f;3&#xff1a;Hession RPC概念二&#xff1a;Hessian RPC设计思想1&#xff1a;Hession依赖于服务器2…...

逆向 x蜂窝 zzzghostsigh

逆向 x蜂窝 zzzghostsigh 版本 9.3.7 新版本是64位的so charles 抓包 目标字段 zzzghostsigh frida java function hook_xPreAuthencode() {Java.perform(function() {var helper Java.use("com.mfw.tnative.AuthorizeHelper");helper.xPreAuthencode.implemen…...

QML 鼠标事件

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 QML 中有一些元素本身是不具备交互能力的(例如:Rectangle、Text、Image 等),那么如何通过鼠标来控制它们的行为呢?这里就需要用到 MouseArea 元素了,它继承于 Item 且不可见,通常需要与可见元素结合使…...

极智项目 | 实战pytorch arcface人脸识别

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍 实战pytorch arcface人脸识别&#xff0c;并提供完整项目源码。 本文介绍的实战arcface人脸识别项目&#xff0c;提供完整的可以一键训练、测试的项目工程…...

【IP技术】ipv4和ipv6是什么?

IPv4和IPv6是两种互联网协议&#xff0c;用于在互联网上标识和寻址设备。IPv4&#xff08;Internet Protocol version 4&#xff09;是互联网协议的第四个版本&#xff0c;是当前广泛使用的互联网协议。IPv4地址由32位二进制数构成&#xff0c;通常表示为4个十进制数&#xff0…...

linux基本功系列之uniq命令实战

文章目录前言一. uniq的命令介绍二. 语法格式及常用选项三. 参考案例3.1 统计行数3.2 对文本进行去重3.3 显示不重复的行3.4 仅显示重复的行&#xff0c;且显示重复的行的所有行3.5 忽略字母大小写总结前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本…...

六、SpringBoot项目搭建

日志 Java 主流日志工具库 统一接口 什么是 REST&#xff1f; Representational State Transfer——“表现层状态转化”。可以总结为一句话&#xff1a;REST 是所有 Web 应用都应该遵守的架构设计指导原则。面向资源是 REST 最明显的特征&#xff0c;对于同一个资源的一组不…...

【LeetCode】2363. 合并相似的物品

2363. 合并相似的物品 题目描述 给你两个二维整数数组 items1 和 items2 &#xff0c;表示两个物品集合。每个数组 items 有以下特质&#xff1a; items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 &#xff0c;weighti 表示第 i 件物品的 重量 。items 中每…...

华为OD机试题,用 Java 解【出租车计费】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...