【数组知识的扩展①】

在这里插入图片描述
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

ArrayList在Java数组中的使用技巧

这篇博客灵感来源于某一天Aileen(🤫)遇到了一道数组合并的题,于是她按照自己的思路把这道题的解题过程写了下来,如下图所示:

在这里插入图片描述

她的想法是想把奇数和偶数分别用两个数组装起来再把它们合并在一个新的数组里面But她尝试通过编写代码实现自己的想法,如下:
import java.util.Arrays;
public class Work11_1 {public static  String reverse(int[] arr){//创建一个空数组装所有元素int[] all = new int[]{};//创建一个空数组装偶数int[] evenarr = new int[]{};//创建一个空数组装奇数int[] oddarr = new int[]{};for (int i = 0; i < arr.length; i++) {if (arr[i] % 2 == 0) {evenarr[i] = arr[i];}else{oddarr[i] = arr[i];}}System.arraycopy(oddarr,0,all,0,oddarr.length);return Arrays.toString(all);}public static void main(String[] args) {int[] array = new int[]{1,2,3,4,5,6};System.out.println(reverse(array));}

运行结果:

在这里插入图片描述

通过报错信息我们可以知道,她的代码存在着一些问题:
数组在初始化时(即:`all` ,`evenarr`,`oddarr`的创建)未给它们分配大小,导致后面我们其实是无法向这些数组里面添加元素的,中国有句古话“强扭的瓜不甜”,即使我们强制给他们添加新元素,这也是徒劳,最终就会看到控制台那句报错信息写的:数组越界异常~

在这里插入图片描述

她为了解决这个问题,在Java中找到了一个内置类,即 `ArrayList` , 下面我们将进入ArrayList的学习:

ArrayList:这个类是Java内置的一个类它继承了Java中的AbstractList并实现了List接口。他是一个可以动态修改的数组,与普通数组相比,他没有固定大小的限制,我们可以通过它进行添加或删除元素。

import java.util.ArrayList;public class ArrList {public static void main(String[] args) {// 创建一个 mylist 存储字符串ArrayList<String> mylist = new ArrayList<>();System.out.println("---添加----------------------------------------------------------------------");// 添加元素mylist.add("Apple");mylist.add("Banana");mylist.add("Cherry");System.out.println(mylist);System.out.println("---访问------------------------------------------------------------------------");//使用 get() 方法访问ArrayList中的元素System.out.println(mylist.get(2));//访问第三个元素System.out.println("---修改------------------------------------------------------------------------");//set() 方法修改ArrayList中的元素mylist.set(0,"youzi");//第一个参数为索引位置,第二个是要修改的值System.out.println(mylist);System.out.println("---删除------------------------------------------------------------------------");//remove() 方法删除ArrayList中的元素mylist.remove(2);//删除第三个元素System.out.println(mylist);System.out.println("---计算大小------------------------------------------------------------------------");System.out.println( mylist.size());System.out.println("---迭代打印数组列表------------------------------------------------------------------------");for (int i = 0; i < mylist.size(); i++) {System.out.println(mylist.get(i));}System.out.println("---使用for-each打印数组列表------------------------------------------------------------------------");for (String fruit:mylist) {System.out.println(fruit);}}
}

打印结果:
在这里插入图片描述

让我们把上面学到的ArrayList类的方法用到我们解决这道题的思路上吧~

学以致用

使用ArrayList(单线程常用)解决问题

import java.util.ArrayList;
import java.util.Arrays;
public class Work11_1 {public static String reverse(int[] arr) {//创建两个 Integer 类型的 ArrayList 数组用于储存 奇数和偶数 的数组//偶数数组ArrayList<Integer> evenList = new ArrayList<>();//奇数数组ArrayList<Integer> oddList = new ArrayList<>();//遍历数组,将对应的元素放到对应的数组里面for (int i=0; i < arr.length ; i++){if (arr[i] % 2 == 0) {evenList.add(arr[i]);//将偶数元素装入其对应数组}else{oddList.add(arr[i]);//将奇数元素装入其对应数组}}//创建合并后的数组int [] all = new int[evenList.size()+ oddList.size()];//将奇数数组复制到合并后的数组for (int i = 0; i < oddList.size() ; i++) {all[i] = oddList.get(i);}//将偶数数组复制到合并后的数组for (int i = 0; i < evenList.size(); i++) {all[oddList.size()+i] = evenList.get(i);}return  Arrays.toString(all);}public static void main(String[] args) {int[] array = new int[]{1,2,3,4,5,6};System.out.println(reverse(array));}}
我们通过使用ArrayList这个动态数组能够提高读`get()`写`add()`、`set()`操作的高效性,并且其内存开销比较小,因为它不会每次修改创建数组的副本。However`ArrayList`不是线程安全的,在多线程环境中,如果多个线程同时对同一个`ArrayList`修改,可能会导致数据不一致,或者抛出异常,如果想在多线程环境中使用`ArrayList`.需要手动同步,但它会增加代码的复杂性和错误的风险。

使用CopyOnWriteArrayList(多线程适用)解决问题

import java.util.Arrays;
import java.util.concurrent.CopyOnWriteArrayList;public class Work11_1 {public static String reverse(int[] arr) {// 使用 CopyOnWriteArrayList 来存储奇数和偶数CopyOnWriteArrayList<Integer> evenList = new CopyOnWriteArrayList<>();CopyOnWriteArrayList<Integer> oddList = new CopyOnWriteArrayList<>();// 遍历输入数组,将奇数和偶数分别放入不同的列表for (int i = 0; i < arr.length; i++) {if (arr[i] % 2 == 0) {evenList.add(arr[i]); // 偶数} else {oddList.add(arr[i]); // 奇数}}// 创建合并后的数组int[] all = new int[evenList.size() + oddList.size()];// 将奇数列表复制到合并后的数组for (int i = 0; i < oddList.size(); i++) {all[i] = oddList.get(i);}// 将偶数列表复制到合并后的数组for (int i = 0; i < evenList.size(); i++) {all[oddList.size() + i] = evenList.get(i);}// 返回合并后的数组的字符串表示return Arrays.toString(all);}public static void main(String[] args) {int[] array = new int[]{1, 2, 3, 4, 5, 6};System.out.println(reverse(array));}
}

Java中for-each的使用

基本语法

for (元素类型 变量名 : 数组或集合){//这里编写对变量的操作
}

具体实例

public class ForEach {public static void main(String[] args) {int[] numbers = {1,2,3,4,5};//使用for-each循环遍历数组//通过变量num遍历数组numbers里面的每一个元素for(int num : numbers){System.out.print(num+" ");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 文件防感染扫描

一、安装 首先&#xff0c;你需要安装 secplugs-python-client 库。你可以通过 pip 命令来安装&#xff1a; pip install secplugs-python-client确保你的 Python 环境已经正确设置&#xff0c;并且网络连接畅通&#xff0c;以便能够顺利安装。 二、基本用法 1. 初始化客户…

【记录】Windows|Windows 修改字体大全(Windows 桌面、VSCode、浏览器)

【记录】Windows&#xff5c;Windows 修改字体大全&#xff08;Windows 桌面、VSCode、浏览器&#xff09; 前言 最近从学长那里发现了一款非常美观的衡水体字体——Maple Mono SC NF。您可以通过以下链接下载该字体&#xff1a;https://github.com/subframe7536/maple-font/…

TiDB替换Starrocks:业务综合宽表迁移的性能评估与降本增效决策

作者&#xff1a; 我是人间不清醒 原文来源&#xff1a; https://tidb.net/blog/6638f594 1、 场景 业务综合宽表是报表生成、大屏幕展示和数据计算处理的核心数据结构。目前&#xff0c;这些宽表存储在Starrocks系统中&#xff0c;但该系统存在显著的性能瓶颈。例如&#…

Vue组件开发的属性

组件开发的属性&#xff1a; 1.ref属性&#xff1a; 如果在vue里&#xff0c;想要获取DOM对象&#xff0c;并且不想使用JS的原生语法&#xff0c;那么就可以使用ref属性 ref属性的用法&#xff1a; 1&#xff09;在HTML元素的开始标记中&#xff0c;或者在Vue子组件中的开始…

JVM、字节码文件介绍

目录 初识JVM 什么是JVM JVM的三大核心功能 JVM的组成 字节码文件的组成 基础信息 Magic魔数 主副版本号 其它基础信息 常量池 字段 方法 属性 字节码常用工具 javap jclasslib插件 阿里Arthas 初识JVM 什么是JVM JVM的三大核心功能 1. 解释和运行虚拟机指…

我的世界之合成

合成&#xff08;Crafting&#xff09;是一种在Minecraft中获得多种方块、工具和其他资源的方法。合成时&#xff0c;玩家必须先把物品从物品栏移入合成方格中。22的简易合成方格可以直接在物品栏中找到&#xff0c;而33的合成方格需要使用工作台或合成器来打开。 目录 1合成系…

LabVIEW智能螺杆空压机测试系统

基于LabVIEW软件开发的螺杆空压机测试系统利用虚拟仪器技术进行空压机的性能测试和监控。系统能够实现对螺杆空压机关键性能参数如压力、温度、流量、转速及功率的实时采集与分析&#xff0c;有效提高测试效率与准确性&#xff0c;同时减少人工操作&#xff0c;提升安全性。 项…

Ubuntu22.04 制作系统ISO镜像

第一步&#xff1a;安装软件-Systemback 1.如果已经添加过ppa&#xff0c;可以删除重新添加或者跳过此步 sudo add-apt-repository --remove ppa:nemh/systemback 2.添加ppa 我是ubuntu20&#xff0c;但这个软件最后支持的是 ubuntu16.04版本&#xff0c;所以加一个16版本…

C++ | Leetcode C++题解之第480题滑动窗口中位数

题目&#xff1a; 题解&#xff1a; class DualHeap { private:// 大根堆&#xff0c;维护较小的一半元素priority_queue<int> small;// 小根堆&#xff0c;维护较大的一半元素priority_queue<int, vector<int>, greater<int>> large;// 哈希表&#…

自动化测试实施过程中需要考虑的因素!

自动化测试是软件开发过程中不可或缺的一部分&#xff0c;它能够提高测试效率、减少人力成本&#xff0c;并确保软件质量的一致性。然而&#xff0c;自动化测试的实施并非没有挑战。为了确保自动化测试的有效性和可持续性&#xff0c;开发者需要综合考虑多种因素&#xff0c;包…

【CTF-SHOW】Web入门 Web14 【editor泄露-详】【var/www/html目录-详】

editor泄露问题通常出现在涉及文件编辑器或脚本编辑器的题目中&#xff0c;尤其是在Web安全或Pwn&#xff08;系统漏洞挖掘&#xff09;类别中。editor泄露的本质是由于系统未能妥善处理临时文件、编辑历史或进程信息&#xff0c;导致攻击者可以通过某种途径获取正在编辑的敏感…

EasyOCR——超强超便捷的OCR开源算法介绍与文本检测模型CRAFT微调方法

背景 最近在实际操作阿拉伯文小语种OCR功能的时候&#xff0c;尝试了诸多开源算法&#xff0c;但效果均不尽如人意。 说实在的&#xff0c;针对阿拉伯文的OCR开源算法&#xff0c;若仅仅是效果没那么优秀&#xff0c;比如识别率能有个70%80%&#xff0c;我还能微调微调&#…

【React系列三】—React学习历程的分享

一、组件实例核心—Refs 通过定义 ref 属性可以给标签添加标识 字符串形式的Refs 这种形式已经不再推荐使用&#xff0c;官方不建议使用 https://zh-hans.legacy.reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs 回调形式的Refs <script type"te…

PostgreSQL中触发器递归的处理 | 翻译

许多初学者在某个时候都会陷入触发器递归的陷阱。通常&#xff0c;解决方案是完全避免递归。但对于某些用例&#xff0c;您可能必须处理触发器递归。本文将告诉您有关该主题需要了解的内容。如果您曾经被错误消息“超出堆栈深度限制”所困扰&#xff0c;那么这里就是解决方案。…

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08;…

msql事务隔离级别 线上问题

1. 对应代码 解决方式&#xff1a; 在事务隔离级别为可重复读&#xff08;RR&#xff09;时&#xff0c;数据库确实通常会记录当前数据的快照。 在可重复读隔离级别下&#xff0c;事务在执行期间看到的数据是事务开始时的数据快照&#xff0c;即使其他事务对数据进行了修改&am…

Lucas带你手撕机器学习——线性回归

什么是线性回归 线性回归是机器学习中的基础算法之一&#xff0c;用于预测一个连续的输出值。它假设输入特征与输出值之间的关系是线性关系&#xff0c;即目标变量是输入变量的线性组合。我们可以从代码实现的角度来学习线性回归&#xff0c;包括如何使用 Python 进行简单的线…

2024 最新版1200道互联网大厂Java面试题附答案详解

很多 Java 工程师的技术不错&#xff0c;但是一面试就头疼&#xff0c;10 次面试 9 次都是被刷&#xff0c;过的那次还是去了家不知名的小公司。 问题就在于&#xff1a;面试有技巧&#xff0c;而你不会把自己的能力表达给面试官。 应届生&#xff1a;你该如何准备简历&#…

4、CSS3笔记

文章目录 四、CSS3CSS3简介css3概述CSS3私有前缀什么是私有前缀为什么要有私有前缀常见浏览器私有前缀 CSS3基本语法CSS3新增长度单位CSS3新增颜色设置方式CSS3新增选择器CSS3新增盒模型相关属性box-sizing 怪异盒模型resize 调整盒子大小box-shadow 盒子阴影opacity 不透明度 …

【ChatGPT插件漏洞三连发之一】未授权恶意插件安装

漏洞 要了解第一个漏洞&#xff0c;我们必须首先向您展示 OAuth 身份验证的工作原理&#xff1a; 假设您是 Dan&#xff0c;并且您想使用您的 Facebook 帐户连接到 Example.com。当您点击“使用Facebook登录”时会发生什么&#xff1f; 在步骤 2-3 中&#xff1a; 在 Dan 单…