【Java高级语法】(二十一)数组操作类:解析Arrays类中的全部操作方法,解锁Java数组操作技巧~

news2024/10/6 14:39:07

Java高级语法详解之数组操作类

  • 1️⃣ 概念
  • 2️⃣ 优势和缺点
  • 3️⃣ 使用
    • 3.1 Arrays类常用方法
    • 3.2 使用技巧
  • 4️⃣ 应用场景
  • 🌾 总结

前言:在学习本文之前,应该先学习并清楚了解Java基础部分的数组相关的概念和知识。
若还不具备学习条件,请先前往学习数组部分的基础知识,这里推荐:
java数组完全解析(干货满满)

在这里插入图片描述

1️⃣ 概念

Java的数组类Arrays是为了提供一组便捷的操作和处理数组的方法而设计的。它旨在简化开发人员对数组进行操作的复杂性,并提供一些常用的功能。

数组是一种固定长度的数据结构,其中可以存储同一类型的多个元素。数组类Arrays允许开发人员在Java中声明、创建和操作这些数组。

2️⃣ 优势和缺点

  • 优点
    提供了丰富的数组操作方法,简化了代码的开发和维护过程;统一了不同类型的数组处理方式,减少了学习和理解的成本。

  • 缺点
    数组类Arrays的功能虽然强大,但并不能完全满足所有数组操作的需求;对于大规模数据的操作,可能存在性能问题。

3️⃣ 使用

3.1 Arrays类常用方法

以下是Java的数组类 Arrays 的全部操作方法API,按功能分类并以表格形式呈现:

方法描述
List<T> asList(T... a)返回一个固定长度的List,包含指定数组中的所有元素
int binarySearch(Object[] a, Object key)在指定数组中使用二分查找算法搜索指定元素的索引
int binarySearch(Object[] a, int fromIndex, int toIndex, Object key)在指定范围内的数组使用二分查找算法搜索指定元素的索引
void sort(Object[] a)对指定数组进行排序。方法重载,还支持:字节数组、字符数组、浮点数数组、整型数组
int hashCode(Object[] a)返回指定数组的哈希码值
boolean equals(Object[] a, Object[] a2)比较两个数组是否相等
String toString(int[] a)返回指定整型数组的字符串表示形式。方法重载,还支持:字节数组、字符数组、浮点数数组、布尔数组
T[] copyOf(T[] original, int newLength)将指定数组的长度调整为指定的新长度,返回一个新数组
T[] copyOfRange(T[] original, int from, int to)将指定范围内的数组复制到一个新数组中,并返回新数组
void fill(int[] a, int val)将指定整型数组的所有元素设置为指定值。方法重载,还支持:字节数组、字符数组、浮点数数组、布尔数组
boolean deepEquals(Object[] a1, Object[] a2)比较两个数组是否深度相等,即逐级比较数组元素
T[] toArray(Collection<? extends T> c, Class<T> clazz)将指定集合转换为具有指定运行时类型的数组

这些方法提供了丰富的功能,可以通过调用相应的方法来操作和处理数组。

下面的程序演示了如何使用 Arrays 类的各种方法来操作和处理数组:

import java.util.Arrays;
import java.util.List;

public class ArraysDemo {

    public static void main(String[] args) {
        // 使用asList方法,将数组转换为List
        Integer[] arr = {1, 2, 3, 4, 5};
        List<Integer> list = Arrays.asList(arr);
        System.out.println("Array as List: " + list);

        // 使用binarySearch方法,在数组中查找指定元素的索引
        int index = Arrays.binarySearch(arr, 3);
        System.out.println("Index of element 3: " + index);

        // 使用binarySearch方法,在指定范围内的数组中查找指定元素的索引
        int indexInRange = Arrays.binarySearch(arr, 1, 4, 3);
        System.out.println("Index of element 3 in range 1-4: " + indexInRange);

        // 使用sort方法进行排序
        int[] intArray = {8,9,7,6,10};
        Arrays.sort(intArray);
        System.out.println("Sorted array: " + Arrays.toString(intArray));

        // 使用hashCode方法获取数组的哈希码值
        int hashCode = Arrays.hashCode(arr);
        System.out.println("Hash code of array: " + hashCode);

        // 使用equals方法比较两个数组是否相等
        Integer[] anotherArr = {1, 2, 3, 4, 5};
        boolean isEqual = Arrays.equals(arr, anotherArr);
        System.out.println("Arrays are equal: " + isEqual);

        // 使用toString方法将整型数组转换为字符串表示形式
        String arrString = Arrays.toString(arr);
        System.out.println("Array as string: " + arrString);

        // 使用copyOf方法将数组长度调整为新长度,并返回新数组
        Integer[] resizedArray = Arrays.copyOf(arr, 3);
        System.out.println("Resized array: " + Arrays.toString(resizedArray));

        // 使用copyOfRange方法复制指定范围内的数组到新数组中
        Integer[] copiedArray = Arrays.copyOfRange(arr, 1, 4);
        System.out.println("Copied array: " + Arrays.toString(copiedArray));

        // 使用fill方法将数组元素设置为指定值
        int[] intArr = new int[5];
        Arrays.fill(intArr, 7);
        System.out.println("Filled array: " + Arrays.toString(intArr));

        // 使用deepEquals方法比较两个数组是否深度相等
        String[] strArr1 = {"apple", "banana"};
        String[] strArr2 = {"apple", "banana"};
        boolean isDeepEqual = Arrays.deepEquals(strArr1, strArr2);
        System.out.println("Arrays are deeply equal: " + isDeepEqual);

        // 使用toArray方法,将集合转换为指定类型的数组
        List<String> stringList = Arrays.asList("Hello", "World");
        String[] stringArr = stringList.toArray(new String[0]);
        System.out.println("Array from collection: " + Arrays.toString(stringArr));
    }
}

运行结果如下:

Array as List: [1, 2, 3, 4, 5]
Index of element 3: 2
Index of element 3 in range 1-4: 2
Sorted array: [6, 7, 8, 9, 10]
Hash code of array: 29615266
Arrays are equal: true
Array as string: [1, 2, 3, 4, 5]
Resized array: [1, 2, 3]
Copied array: [2, 3, 4]
Filled array: [7, 7, 7, 7, 7]
Arrays are equal: true
Arrays are deeply equal: true
Array from collection: [Hello, World]

3.2 使用技巧

使用Java的数组类Arrays时,可以考虑以下优化技巧:

  • 数组的索引从0开始,要确保索引值不越界;

  • 不要频繁地进行数组复制操作,以避免性能损失;

  • 在进行大规模数据处理时,可以提前估算存储空间的大小,避免尺寸太大造成的空间浪费,也避免尺寸小造成的数据溢出异常问题;

  • 尽量使用binarySearch()方法进行查找,而不是遍历整个数组;

  • 对于需要频繁操作的数组,建议使用基本类型(如intchar)的数组,而不是对象类型;

  • 注意排序方法的选择,不同的排序算法具有不同的时间复杂度和性能特点。

4️⃣ 应用场景

Java的数组类Arrays广泛应用于各个领域的开发,常见的应用场景包括:

  • 数据结构和算法中的数组操作;
  • 提供给外部模块或用户的接口中,以方便对数组进行操作;
  • 在各种类型的数据处理任务中,如统计、排序等。

🌾 总结

Java的数组类Arrays提供了丰富的数组操作方法,可用于对数组进行排序、查找、填充等常用操作。它的设计目的是简化数组操作的复杂性,并提供一些常用功能,以提升开发效率和程序性能。使用时需要注意索引越界、性能优化等问题,并根据具体业务场景合理选择适当的方法及技巧。

在这里插入图片描述

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

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

相关文章

途乐证券|人工智能概念再度下挫 海天瑞声、寒武纪等跌超10%

人工智能概念26日盘中大幅回调&#xff0c;截至发稿&#xff0c;当虹科技跌近18%&#xff0c;美亚柏科、昆仑万维跌约13%&#xff0c;博睿数据、光云科技、海天瑞声、寒武纪等跌超10%&#xff0c;焦点科技跌停&#xff0c;云从科技、朗玛信息、三六零等跌超9%。 香港途乐证券有…

力扣125:判断字符串是否是回文字符串

题目描述&#xff1a; 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个回文串。 字母和数字都属于字母数字字符。 给定一个字符串s&#xff0c;如果它是回文串&#xff0c;返回true&#xff1…

文件批量重命名利器!统一重命名和隐藏编号,让不同类型的文件整齐有序

进入数字时代&#xff0c;我们的电脑中存储了大量的文件&#xff0c;但是随着时间的推移&#xff0c;这些文件名可能变得混乱而难以管理。那么正需要文件批量改名高手来为你排忧解难&#xff0c;不仅可以将不同类型的文件统一重命名&#xff0c;还能隐藏顺序编号&#xff0c;让…

k8s calico 网络异常处理

故障 worker3故障重启后&#xff0c;该节点的 pod 访问不了其它节点服务 2023-06-26T07:44:41.041Z ERROR setup unable to start manager {"error": "Get \"https://10.244.64.1:443/api?timeout32s\": dial tcp 10.244.64.1:443: i/o…

还在用gtest?更好用的测试框架介绍

gtest需要安装有时候带来很多不方便。网络原因&#xff0c;下载安装gtest或者git上拉gtest都可能因为网络原因失败。除了gtest之外&#xff0c;还有很多轻量级易用的单元测试库&#xff0c;比如doctest。 现代C unit-test库 除了gtest之外&#xff0c;还有很多轻量级易用的单元…

Vscode如何快速打开用户的 settings.json 文件

1、打开vscode编辑器&#xff0c;本文演示的vscode是中文版 2、点击右下角齿轮’设置’ 3、在弹出的设置菜单中选择: 设置 ’ 快捷键 cmd, &#xff08;macos&#xff09; ctrl,&#xff08;windows&#xff09; 4、 点击 设置 ’ 后, 弹出设置窗口 5、在设置窗口右上角点击…

一些性能优化思路与策略

一些性能优化思路与策略 1. 前言2. 性能观察指标3.性能监控工具/途径 1. 前言 今天公司同事做技术分享&#xff0c;题目就是&#xff1a;一些性能优化思路与策略&#xff0c;我学习了一下然后做了如下总结。 2. 性能观察指标 响应时间:平均响应时间&#xff0c;TP95、TP99等等…

将字符串“01:03”转换成秒数

场景&#xff1a;我们经常遇到这种场景&#xff0c;用户使用前端的时间组件自定义时间长度&#xff0c;比如antd的timePicker&#xff0c;传递选中的时间给后端&#xff0c;但是在后端中我们一般会使用秒数或者分钟数去保存&#xff0c;而不会保存一个字符串。 这个时候我们需要…

探索OpenCV的AI实现视频超分

OpenCV除了使用光流算法与普通插值实现图像视频超分&#xff0c;还提供AI深度学习实现视频超分。算法模型包括&#xff1a;edsr、espcn、fsrcnn、lapsrn&#xff0c;实现超分的倍数有2、3、4、8。通过AI实现的视频超分比传统算法的效果更好&#xff0c;图像更清晰。 1、超分算…

大数据面试题之Mysql:每日三题(五)

大数据面试题之Mysql:每日三题 1.MySQL索引存储结构(六种)2.on和where的区别3.mysql是怎么查重的&#xff1f;(重点掌握3种&#xff0c;distinct&#xff0c;group by&#xff0c;row_number) 很开心写完上一篇&#xff0c;就立刻找到了我入职的第二家公司&#xff0c;所以我还…

Gitlab保护分支与合并请求

目录 引言 1、成员角色指定 1、保护分支设置 2、合并请求 引言 熟悉了Git工作流之后&#xff0c;有几个重要的分支&#xff0c;如Master(改名为Main)、Develop、Release分支等&#xff0c;是禁止开发成员随意合并和提交的&#xff0c;在此分支上的提交和推送权限仅限项目负责…

电商假货品牌如何应对

随着电商的逐步发展&#xff0c;不同渠道首的产品上架数量呈明显增长&#xff0c;这些链接里会有经销商店铺&#xff0c;或者是非授权店铺&#xff0c;同时伴随的还会有低价、窜货、假货产品。假货大多是低价链接&#xff0c;面对线上逐渐增多的假货链接&#xff0c;品牌又该如…

C++ / QT 旅游产品管理系统

一、项目介绍 旅游产品管理系统 你是一家旅行社的 IT 主管&#xff0c;现在需要你设计并实现一个旅游产品管理系统。 1 &#xff09; 基本功能要求 * 实现基础界面&#xff1a; 参照现有的旅游产品管理系统&#xff1a;查看产品、选择产品、使用说明等内容 * 支持旅游产品…

【每日一题】Leetcode - 283. 移动零

题目 Leetcode - 283. 移动零 解题思路 从右向左遍历&#xff0c;遇到0&#xff0c;就将后面所有元素前移&#xff0c;同时更新长度&#xff0c;使其减1&#xff0c;因为移动n次&#xff0c;倒数n位就被0占据&#xff0c;后续操作可忽略 class Solution {public void moveZ…

G1吊舱全面升级,新增软件驱动库,支持多平台使用

G1吊舱&#xff0c;是我们去年推出的一款自研的云台产品&#xff0c;体积小巧&#xff0c;功能强大&#xff0c;上市后得到了很多朋友的支持。在上市后的一年期间&#xff0c;我们多方收集用户反馈&#xff0c;并基于用户的宝贵建议对G1吊舱进行了软硬件上的升级。 ​ 一、软件…

【ubuntu】【vmware tools】解决重启后看不到共享目录的问题

1、现象 ubuntu 22 vmware 16&#xff0c;安装后会发现 “Reinstall VMware Tools…” 灰色不可用。如图&#xff1a; 2、原因分析 ubuntu 22 ISO 内不再提供 VMware Tools 的安装包&#xff0c;未检测到所以灰色不可用 在 Ubuntu 22 上挂载 Windows HGFS 共享目录&#xff…

点成分享丨实验室磁力搅拌器的原理及应用

磁力搅拌器概述 磁力搅拌器是一种广泛应用于化学实验室、生物技术、制药和其他研究领域的实验室设备。在实验中&#xff0c;溶液需要混合均匀才能进行下一步的反应或测量。传统的方法是通过手动搅拌或机械搅拌来实现&#xff0c;但这些方法都有一定的缺陷&#xff0c;如不均匀、…

图解平衡二叉搜索树

gitee仓库&#xff1a;https://gitee.com/WangZihao64/data-structure-and-algorithm/tree/master/avl 有如下一棵树(采用加入左结点平衡因子-1&#xff0c;加入右结点平衡因子1的方式)&#xff1a; 插入有以下几种情况&#xff1a; 1.平衡因子变为2 2.平衡因子变为0 3.平衡因…

一个基于 SpringCloud 微服务架构的前后端分离博客系统

项目介绍 蘑菇博客( MoguBlog )&#xff0c;一个基于微服务架构的前后端分离博客系统。Web 端使用 Vue ElementUi , 移动端使用 uniapp 和 ColorUI。 后端使用 SpringCloud SpringBoot Mybatis-plus进行开发&#xff0c;使用 Jwt SpringSecurity 做登录验证和权限校验&am…

统计机器学习第十三章极大似然估计的性质——图解MLE的渐进正态性

n10; t10000; s1/12/n; xlinspace(-0.4,0.4,100); y1/sqrt(2*pi*s)*exp(-x.^2/(2*s)); zmean(rand(t,n)-0.5,2);figure(1); clf; hold on b20; hist(z,b); hplot(x,y*t/b*(max(z)-min(z)),r-);这段代码的功能是生成随机数并进行直方图和曲线的可视化。下面是每行代码的解释&…