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

【从零开始学Java | 第二十九篇】数组工具类Arrays和集合工具类Collections

目录前言一、数组工具类Arrays1.数组的打印2.数组的排序和查找3.数组的复制和扩容4.数组转换集合二、集合工具类Collections1.排序和位置操作2.查找和极值运算前言本次学习两个Java提供的工具类第一个是用来操作数组的工具类——Arrays第二个是用来操作集合的工具类——Collections。Collections要与Collection区分开来一个是Java提供的用来操作集合的工具类另一个则是List、Set等的顶层接口提供了对集合的基础操作。一、数组工具类Arrays1.数组的打印当我们使用System.out.println(arr)数组时控制台只会输出一个地址值而Arrays提供了一个方法能够不需要遍历直接打印数组。toString(数据类型[] a)将一维数组的内容拼接成一个带中括号和逗号的字符串。deepToString(Object[] a)专门用于打印多维数组。如果是二维数组用普通的toString依然会打印出内存地址必须用deepToString。int[] arr {1, 3, 4, 5, 6, 7}; System.out.println(Arrays.toString(arr)); //输出[1, 3, 4, 5, 6, 7] int[][] matrix {{1, 2}, {3, 4}}; System.out.println(Arrays.deepToString(matrix)); //输出[[1, 2], [3, 4]]2.数组的排序和查找sort(数据类型[] a):对数组进行升序排序。sort(T[] a, Comparator? super T c):传入自定义比较器进行排序注意只能用于对象数组如Integer[]不能用于int[]。binarySearch(数据类型[] a, 查找值 key):使用二分查找法在数组中寻找指定值返回对应的索引。注在使用二分查找时必须确保数组已经是升序排序状态。//二、排序、查找 int[] arr2 {5, 7, 2, 6, 9}; Arrays.sort(arr2); System.out.println(Arrays.toString(arr2)); //输出[2, 5, 6, 7, 9] Integer[] arr3 {5, 7, 2, 6, 9}; Arrays.sort(arr3, new ComparatorInteger() { Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); System.out.println(Arrays.toString(arr3)); //输出[9, 7, 6, 5, 2] System.out.println(Arrays.binarySearch(arr2, 7)); //输出33.数组的复制和扩容copyOf(数据类型[] original, int newLength)复制指定的数组并截断或用默认值如 0 或 null填充使其达到指定的newLength。copyOfRange(数据类型[] original, int from, int to)截取数组中的一部分复制成一个新数组。注意范围是包头不包尾[from, to)。int[] origin {10, 20, 30}; // 1. 扩容到长度 5 (后面自动补 0) int[] expanded Arrays.copyOf(origin, 5); System.out.println(扩容后: Arrays.toString(expanded)); // [10, 20, 30, 0, 0] // 2. 截取索引 0 到 2 (不包括 2) int[] subArr Arrays.copyOfRange(origin, 0, 2); System.out.println(截取后: Arrays.toString(subArr)); // [10, 20]4.数组转换集合asList(T...a):将一组对象或一个数组转换为List集合。注意1.不能改变长度asList返回的其实并不是我们常用的java.util.ArrayList而是Arrays内部的一个私有静态内部类。这个内部类没有重写add和remove方法。如果你对转换后的集合执行增删操作会直接抛出UnsupportedOperationException。2.如果你传入一个int[]基本类型数组asList会把整个数组当成一个单一的元素放入 List而不是把数组里的数字分别放入 List。必须使用包装类数组如Integer[]才能得到预期的效果。错误示范①错误示范②二、集合工具类Collections1.排序和位置操作sort(ListT list)对 List 中的元素进行自然排序升序。前提是 List 中的元素必须实现了Comparable接口。sort(ListT list, Comparator? super T c)根据指定的比较器Comparator进行自定义排序。reverse(List? list)反转List 中元素的顺序。shuffle(List? list)对 List 中的元素进行随机打乱。常用于抽奖、随机发牌等场景。swap(List? list, int i, int j)交换 List 中指定两个索引位置的元素。ListInteger list new ArrayList(Arrays.asList(3, 1, 4, 1, 5, 9)); // 1. 升序排序 Collections.sort(list); System.out.println(升序: list); // 输出: [1, 1, 3, 4, 5, 9] // 2. 自定义降序排序 (结合 Lambda) Collections.sort(list, (a, b) - b - a); System.out.println(降序: list); // 输出: [9, 5, 4, 3, 1, 1] // 3. 反转顺序 Collections.reverse(list); System.out.println(反转: list); // 输出: [1, 1, 3, 4, 5, 9] // 4. 随机打乱 Collections.shuffle(list); System.out.println(打乱: list); // 输出顺序随机2.查找和极值运算binarySearch(List? extends Comparable? list, T key)使用二分查找法在 List 中查找指定元素返回其索引。前提在使用binarySearch之前List 必须已经是升序排好序的如果找不到元素会返回一个负数。max(Collection? extends T coll)/min(...)根据元素的自然顺序返回集合中的最大值或最小值。frequency(Collection? c, Object o)统计某个指定元素在集合中出现的次数。replaceAll(ListT list, T oldVal, T newVal)将 List 中所有的oldVal统一替换为newVal。ListString names new ArrayList(Arrays.asList(张三, 李四, 王五, 李四)); // 统计 李四 出现的次数 int count Collections.frequency(names, 李四); System.out.println(李四出现次数: count); // 输出: 2 // 查找最大值 (按照字符串字典序) System.out.println(最大值: Collections.max(names)); // 批量替换 Collections.replaceAll(names, 李四, 赵六); System.out.println(替换后: names); // 李四全变成了赵六

相关文章:

【从零开始学Java | 第二十九篇】数组工具类Arrays和集合工具类Collections

目录 前言 一、数组工具类Arrays 1.数组的打印 2.数组的排序和查找 3.数组的复制和扩容 4.数组转换集合 二、集合工具类Collections 1.排序和位置操作 2.查找和极值运算 前言 本次学习两个Java提供的工具类,第一个是用来操作数组的工具类——Arrays&#x…...

Notion增强器:如何用岛屿组件系统彻底改变你的工作空间体验

Notion增强器:如何用岛屿组件系统彻底改变你的工作空间体验 【免费下载链接】notion-enhancer An enhancer/customiser for the all-in-one productivity workspace Notion 项目地址: https://gitcode.com/gh_mirrors/no/notion-enhancer 你是否曾经觉得Noti…...

DXVK:突破Linux游戏性能瓶颈的Vulkan转换层解决方案

DXVK:突破Linux游戏性能瓶颈的Vulkan转换层解决方案 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 技术价值:重新定义Linux游戏图形渲染标准 填…...

用Python+Selenium写个抢票脚本,真的比手快吗?聊聊我的实战踩坑与优化心得

PythonSelenium抢票脚本实战:从理想代码到残酷现实的优化之路 去年冬天,当我在电脑前第37次刷新大麦网页面却依然看到"缺货登记"的灰色按钮时,一个危险的念头冒了出来:"为什么不写个脚本?"三个月后…...

2025最权威的五大AI科研网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 毕业论文写作领域里人工智能技术的应用,带来了好多积极影响,明显提高…...

2026届毕业生推荐的五大降AI率网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 从以下方面着手,能够降低AIGC(人工智能生成内容)的检测特…...

Flutter地图集成与跨平台定位从0到1:3大平台配置+5个避坑指南

Flutter地图集成与跨平台定位从0到1:3大平台配置5个避坑指南 【免费下载链接】flutter_amap A Flutter plugin use amap.高德地图flutter组件 项目地址: https://gitcode.com/gh_mirrors/fl/flutter_amap 在移动应用开发中,地图集成和定位服务是许…...

如何构建自修复AI系统:Seldon Core 2数据漂移检测终极指南

如何构建自修复AI系统:Seldon Core 2数据漂移检测终极指南 【免费下载链接】seldon-core An MLOps framework to package, deploy, monitor and manage thousands of production machine learning models 项目地址: https://gitcode.com/gh_mirrors/se/seldon-cor…...

AutoUnipus终极指南:2025年最简单快速的U校园全自动答题工具

AutoUnipus终极指南:2025年最简单快速的U校园全自动答题工具 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台的繁重网课任务而烦恼吗?Aut…...

从三道经典二分题,彻底搞懂「二分查找」的两种核心写法

从三道经典二分题,彻底搞懂「二分查找」的两种核心写法 二分查找是算法面试的「敲门砖」,也是很多人「一看就会,一写就废」的重灾区。很多人卡在边界条件、mid计算、循环终止条件上,本质是没搞懂二分的两种核心模板。 今天我们就…...

为什么BiliTools能成为哔哩哔哩内容管理的最佳选择?3大核心优势解析

为什么BiliTools能成为哔哩哔哩内容管理的最佳选择?3大核心优势解析 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bil…...

开源成就管理神器:SteamAchievementManager的全方位问题解决方案

开源成就管理神器:SteamAchievementManager的全方位问题解决方案 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 在游戏体验中,玩家…...

如何利用WebSocket实现biliup的实时直播状态监控与日志推送:完整指南

如何利用WebSocket实现biliup的实时直播状态监控与日志推送:完整指南 【免费下载链接】biliup 自动直播录制、投稿、twitch、ytb频道搬运工具。命令行投稿(B站)和视频下载工具,提供多种登录方式,支持多p。 项目地址: https://gitcode.com/g…...

终极指南:raylib轻量级游戏开发库的快速上手与实战应用

终极指南:raylib轻量级游戏开发库的快速上手与实战应用 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib raylib是一个简单易用的游戏编程库&#xff0…...

2026年阿里云2分钟超速步骤:OpenClaw搭建及大模型API Key、Skill集成

2026年阿里云2分钟超速步骤:OpenClaw搭建及大模型API Key、Skill集成。OpenClaw作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊、个人工作流中自动执行任务、处理消…...

CD4(分化簇4):免疫共受体的核心机制与抗体药物研发逻辑

CD4(分化簇4,Cluster of Differentiation 4)作为辅助性T细胞的关键标志物与免疫应答的核心共受体,不仅在适应性免疫中扮演“指挥官”角色,更是感染性疾病与自身免疫病药物研发的重要靶点。本文从分子结构、信号转导机制…...

如何实现真实感前端游戏碰撞响应:从弹性到摩擦的完整指南

如何实现真实感前端游戏碰撞响应:从弹性到摩擦的完整指南 【免费下载链接】frontend-stuff 📝 A continuously expanded list of frameworks, libraries and tools I used/want to use for building things on the web. Mostly JavaScript. 项目地址: …...

OpenClaw自动化测试:Qwen3-14B驱动的代码审查机器人

OpenClaw自动化测试:Qwen3-14B驱动的代码审查机器人 1. 为什么需要自动化代码审查 去年参与一个开源项目时,我经常在深夜提交代码后收到维护者的评论:"这里有个拼写错误"、"那个变量命名不规范"。这种延迟反馈让我意识…...

重构手游操控体验:Escrcpy如何颠覆手机游戏交互范式

重构手游操控体验:Escrcpy如何颠覆手机游戏交互范式 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 在移动游戏日益复杂的今天&…...

如何用GetQzonehistory永久备份你的QQ空间回忆?三步轻松搞定

如何用GetQzonehistory永久备份你的QQ空间回忆?三步轻松搞定 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心多年积累的QQ空间说说、照片和评论会随着时间流逝而消…...

终极Cubism.js部署指南:从开发到生产环境的完整实践方案

终极Cubism.js部署指南:从开发到生产环境的完整实践方案 【免费下载链接】cubism Cubism.js: A JavaScript library for time series visualization. 项目地址: https://gitcode.com/gh_mirrors/cu/cubism Cubism.js是一款强大的JavaScript时间序列可视化库&…...

ReTerraForged终极指南:如何在Minecraft 1.20+中打造专业级真实地形

ReTerraForged终极指南:如何在Minecraft 1.20中打造专业级真实地形 【免费下载链接】ReTerraForged a 1.19 port of https://github.com/TerraForged/TerraForged 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged ReTerraForged作为Minecraft 1.…...

终极指南:如何快速配置Cubism.js连接Ganglia数据源实现系统监控可视化

终极指南:如何快速配置Cubism.js连接Ganglia数据源实现系统监控可视化 【免费下载链接】cubism Cubism.js: A JavaScript library for time series visualization. 项目地址: https://gitcode.com/gh_mirrors/cu/cubism Cubism.js是一款强大的JavaScript时间…...

别再忍受龟速下载!保姆级教程:Ubuntu 18.04一键更换阿里云/清华源(附SSH无桌面操作)

Ubuntu 18.04国内软件源极速配置指南:告别蜗牛速度的终极方案 每次执行apt update时盯着缓慢爬升的进度条,是否让你产生砸键盘的冲动?作为国内Ubuntu用户,默认国际源的龟速下载堪称开发效率的头号杀手。本文将彻底解决这个痛点——…...

StructBERT在金融舆情监控系统中的实时分类方案

StructBERT在金融舆情监控系统中的实时分类方案 1. 引言 金融市场的波动往往源于信息的快速传播。一条突发的负面新闻可能在几分钟内引发股价大幅波动,而一个利好消息也可能在瞬间推动市场情绪高涨。传统的金融舆情监控系统往往面临响应延迟的挑战,等到…...

LANCZOS智能压缩+RGB自动转换:Anything to RealCharacters预处理模块详解

LANCZOS智能压缩RGB自动转换:Anything to RealCharacters预处理模块详解 1. 项目概述 Anything to RealCharacters是一款专为RTX 4090显卡设计的2.5D转真人图像转换系统。该系统基于通义千问Qwen-Image-Edit-2511图像编辑模型,集成了专门优化的写实化权…...

终极指南:3分钟上手res-downloader,轻松下载全网视频音频资源

终极指南:3分钟上手res-downloader,轻松下载全网视频音频资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-download…...

3种RPA文件解包实战技巧:从游戏资源提取到技术深潜的完整指南

3种RPA文件解包实战技巧:从游戏资源提取到技术深潜的完整指南 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 当你沉浸在视觉小说的世界中,是否曾好奇那些…...

ai辅助qt性能优化:让快马平台帮你设计多线程数据可视化方案

最近在开发一个Qt实时数据可视化应用时,遇到了主界面卡顿的问题。经过分析发现,数据采集和处理操作直接在主线程执行,导致UI响应延迟。通过InsCode(快马)平台的AI辅助功能,我快速获得了一个多线程优化方案,效果显著。这…...

UE4新手必看:5分钟搞定角色沿Spline路径移动动画(附Level Sequence配置)

UE4路径动画实战:从Spline绑定到Level Sequence高级配置 在游戏开发中,让角色沿着预设路径移动是过场动画和游戏机制设计的常见需求。本文将带你深入UE4的Spline路径动画系统,不仅解决基础实现问题,还会分享几个提升动画质量的实用…...