Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)

1、Java数组(Arrays)语法知识点及案例

一、数组的基本概念

数组是多个相同类型的数据按照一定的顺序排列的集合,使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是引用数据类型,数组的元素可以是任意类型。数组一旦初始化,长度则不能更改。

二、数组的分类
  • 维度分:一维数组、二维数组、多维数组
  • 元素分:基本数据类型元素数组、引用数据类型元素数组
三、一维数组
  1. 数组的声明和初始化
    • 静态初始化:数组的初始化和数组元素的赋值操作同时进行。
    • 动态初始化:数组的初始化和数组元素的赋值操作分开进行。
// 静态初始化
int[] id = {1001, 1002, 1003, 1004};// 动态初始化
String[] name = new String[5];
  1. 调用数组指定位置的元素
    通过索引方式调用,数组的索引从0开始,到(长度-1)结束。
// 调用数组name的第1个元素(索引为0)
name[0] = "Alice";
  1. 获取数组的长度
// 获取数组name的长度
int length = name.length; // 5
  1. 遍历数组
// 使用for循环遍历数组name
for (int i = 0; i < name.length; i++) {System.out.println(name[i]);
}
  1. 数组元素默认初始化值
    • 基本数据类型数组:默认初始化值为0(整数类型)、0.0(浮点类型)、false(布尔类型)、‘\u0000’(字符类型)。
    • 引用数据类型数组:默认初始化值为null。
四、多维数组
  1. 二维数组的初始化
    • 静态初始化
int[][] arr1 = {{1, 2, 3},{4, 5},{6, 7, 8}
};
  • 动态初始化
String[][] arr2 = new String[3][2];
  1. 调用二维数组指定位置的元素
// 调用二维数组arr1的第1行第2列的元素(索引为[0][1])
int value = arr1[0][1]; // 2
  1. 获取二维数组的长度
// 获取二维数组arr1的外层长度(行数)
int outerLength = arr1.length; // 3// 获取二维数组arr1的第1行的内层长度(列数)
int innerLength = arr1[0].length; // 3
  1. 遍历二维数组
// 使用嵌套for循环遍历二维数组arr1
for (int i = 0; i < arr1.length; i++) {for (int j = 0; j < arr1[i].length; j++) {System.out.print(arr1[i][j] + " ");}System.out.println();
}
五、Arrays类中的常用方法
  1. copyOf
    • 用于复制数组,返回一个新数组,其长度为指定长度,元素为原数组的值。
int[] arr5 = {7, 8, 9};
int[] arr6 = Arrays.copyOf(arr5, 5);
System.out.println(Arrays.toString(arr6)); // [7, 8, 9, 0, 0]
  1. sort
    • 对数组进行排序。
int[] arr3 = {5, 4, 6};
Arrays.sort(arr3);
System.out.println(Arrays.toString(arr3)); // [4, 5, 6]
  1. binarySearch
    • 使用二分查找算法查找元素的下标,要求数组已经按升序排列。
int[] arr7 = {1, 2, 3, 4, 5};
Arrays.sort(arr7);
int index = Arrays.binarySearch(arr7, 3);
System.out.println(index); // 2
  1. fill
    • 将数组的所有元素设置为指定值。
String[] arr4 = {"你", "好"};
Arrays.fill(arr4, "小维");
System.out.println(Arrays.toString(arr4)); // [小维, 小维]
  1. equals
    • 比较两个数组是否相等。
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
boolean isEqual = Arrays.equals(arr1, arr2);
System.out.println(isEqual); // true
  1. toString
    • 将数组转换为字符串。
int[] arr = {1, 2, 3};
String str = Arrays.toString(arr);
System.out.println(str); // [1, 2, 3]
六、综合案例
public class ArrayDemo {public static void main(String[] args) {// 一维数组int[] numbers = {1, 2, 3, 4, 5};System.out.println("一维数组:");for (int number : numbers) {System.out.print(number + " ");}System.out.println();// 二维数组int[][] matrix = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};System.out.println("二维数组:");for (int[] row : matrix) {for (int element : row) {System.out.print(element + " ");}System.out.println();}// Arrays类的使用int[] arr1 = {7, 8, 9};int[] arr2 = Arrays.copyOf(arr1, 5);System.out.println("复制后的数组:" + Arrays.toString(arr2));int[] arr3 = {5, 3, 8, 6, 2};Arrays.sort(arr3);System.out.println("排序后的数组:" + Arrays.toString(arr3));int index = Arrays.binarySearch(arr3, 6);System.out.println("元素6的下标:" + index);String[] arr4 = {"a", "b", "c"};Arrays.fill(arr4, "x");System.out.println("填充后的数组:" + Arrays.toString(arr4));int[] arr5 = {1, 2, 3};int[] arr6 = {1, 2, 3};boolean isEqual = Arrays.equals(arr5, arr6);System.out.println("数组是否相等:" + isEqual);}
}

以上内容涵盖了Java数组的基本语法知识点,并通过具体案例和详细注释展示了如何使用这些知识点。

在Java中,数组是一种重要的数据结构,用于存储固定大小的同类型元素集合。Java标准库提供了Arrays类,其中包含了一系列用于操作数组的静态方法。以下是Java数组中常用的操作函数及其功能介绍:

  1. 排序(Sort)

    • Arrays.sort(T[] a):对指定数组按其元素的自然顺序进行升序排序。此方法适用于所有实现了Comparable接口的元素类型。
    • Arrays.sort(T[] a, int fromIndex, int toIndex):对指定数组的指定范围进行排序。
    • Arrays.sort(T[] a, Comparator<? super T> c):根据指定比较器产生的顺序对数组进行排序。
  2. 搜索(Search)

    • Arrays.binarySearch(T[] a, T key):使用二分查找算法在已排序数组中查找指定元素的下标。如果找到,则返回其索引;如果未找到,则返回负值,其绝对值是第一个大于关键字的元素索引减一(如果关键字小于所有元素,则返回-length-1)。
    • Arrays.binarySearch(T[] a, int fromIndex, int toIndex, T key):在指定范围内进行二分查找。
  3. 复制(Copy)

    • Arrays.copyOf(T[] original, int newLength):复制指定数组,并调整新数组的长度。如果新长度大于原数组长度,则新数组中的新元素将被设置为null(对于对象数组)或0(对于基本类型数组)。
    • Arrays.copyOfRange(T[] original, int from, int to):复制指定数组范围的元素到新数组。from是起始索引(包含),to是结束索引(不包含)。
  4. 填充(Fill)

    • Arrays.fill(T[] a, T val):将指定值分配给指定数组的每个元素。
    • Arrays.fill(T[] a, int fromIndex, int toIndex, T val):将指定值分配给指定数组范围的每个元素。
  5. 比较(Equals)

    • Arrays.equals(T[] a, T[] a2):如果两个数组长度相同且内容相同,则返回true;否则返回false
  6. 转换为字符串(ToString)

    • Arrays.toString(T[] a):返回指定数组内容的字符串表示形式。
      以下是一些使用上述函数的示例代码:
import java.util.Arrays;public class ArrayOperations {public static void main(String[] args) {// 排序Integer[] numbers = {5, 3, 8, 6, 2};Arrays.sort(numbers);System.out.println("排序后的数组:" + Arrays.toString(numbers));// 搜索int index = Arrays.binarySearch(numbers, 6);System.out.println("元素6的下标:" + index);// 复制Integer[] copy = Arrays.copyOf(numbers, numbers.length + 2);System.out.println("复制后的数组:" + Arrays.toString(copy));// 填充Arrays.fill(copy, copy.length - 2, copy.length, 99);System.out.println("填充后的数组:" + Arrays.toString(copy));// 比较Integer[] arr1 = {1, 2, 3};Integer[] arr2 = {1, 2, 3};boolean isEqual = Arrays.equals(arr1, arr2);System.out.println("数组是否相等:" + isEqual);// 转换为字符串String str = Arrays.toString(arr1);System.out.println("数组转换为字符串:" + str);}
}

以上代码展示了如何使用Java数组中的常用操作函数进行排序、搜索、复制、填充、比较和转换为字符串等操作。这些函数使得数组操作更加简洁和高效。

当然可以,以下是一些具体的Java数组操作案例:

一、数组遍历

public class ArrayTraversal {public static void main(String[] args) {int[] arr = {10, 21, 18, 12, 22};System.out.println("数组中元素个数:" + arr.length);for (int i = 0; i < arr.length; i++) {System.out.println("arr[" + i + "]=" + arr[i]);}}
}

二、数组求和

public class ArraySum {public static void main(String[] args) {int[] arr = {23, 11, 25, 88, 45, 22, 88};int sum = add(arr);System.out.println("sum=" + sum);}public static int add(int[] arr) {int sum = 0;for (int x = 0; x < arr.length; x++) {sum = sum + arr[x];}return sum;}
}

三、数组求最值

public class ArrayMax {public static void main(String[] args) {int[] arr = {23, 55, 55, 45, 90, 11};int max = getMax(arr);System.out.println("max=" + max);}public static int getMax(int[] arr) {int max = arr[0];for (int x = 1; x < arr.length; x++) {if (arr[x] > max) {max = arr[x];}}return max;}
}

四、数组排序

以下是几种常见的数组排序方法:

  1. 冒泡排序
public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}
}
  1. 选择排序
public class SelectionSort {public static void selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}
}

五、数组查找

  1. 线性查找
public class SequentialSearch {public static void main(String[] args) {int[] arr = {45, 62, 15, 62, 78, 30};int index = sequentialSearch(arr, 62);System.out.println("指定元素首次出现的下标位置:" + index);}public static int sequentialSearch(int[] arr, int value) {for (int i = 0; i < arr.length; i++) {if (arr[i] == value) {return i;}}return -1;}
}
  1. 二分查找
public class BinarySearch {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 11, 11, 11, 11, 11};int index = binarySearch(arr, 11);System.out.println("指定元素出现的下标位置:" + index);}public static int binarySearch(int[] arr, int val) {int low = 0;int high = arr.length - 1;while (low <= high) {int mid = (low + high) / 2;if (val > arr[mid]) {low = mid + 1;} else if (val < arr[mid]) {high = mid - 1;} else {return mid;}}return -1;}
}

六、数组复制

import java.util.Arrays;public class ArrayCopy {public static void main(String[] args) {int[] src = {1, 3, 5, 7, 9, 11, 13, 15, 17};int[] dest = new int[src.length];// 使用System.arraycopy复制数组System.arraycopy(src, 0, dest, 0, src.length);System.out.println(Arrays.toString(dest));// 使用Arrays.copyOf复制数组int[] copyOf = Arrays.copyOf(src, src.length);System.out.println(Arrays.toString(copyOf));// 使用Arrays.copyOfRange复制数组的一部分int[] copyOfRange = Arrays.copyOfRange(src, 2, 6);System.out.println(Arrays.toString(copyOfRange));}
}

七、数组转字符串

public class ArrayToString {public static void main(String[] args) {int[] arr = {22, 22, 13, 85, 15};String str = toString(arr);System.out.println(str);}public static String toString(int[] arr) {StringBuilder sb = new StringBuilder();for (int x = 0; x < arr.length; x++) {if (x != arr.length - 1) {sb.append(arr[x]).append(",");} else {sb.append(arr[x]);}}return sb.toString();}
}

八、数组反转

public class ArrayReverse {public static void main(String[] args) {int[] arr = {13, 22, 8, 7, 15};printArray(arr);reverseArray(arr);printArray(arr);}public static void reverseArray(int[] arr) {for (int start = 0, end = arr.length - 1; start < end; start++, end--) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;}}public static void printArray(int[] arr) {for (int i = 0; i < arr.length; i++) {if (i != arr.length - 1) {System.out.print(arr[i] + ",");} else {System.out.println(arr[i]);}}}
}

九、数组填充

import java.util.Arrays;public class ArrayFill {public static void main(String[] args) {int[] arr = new int[5];Arrays.fill(arr, 10);System.out.println(Arrays.toString(arr));String[] strArr = new String[5];Arrays.fill(strArr, "hello");System.out.println(Arrays.toString(strArr));// 填充指定范围Arrays.fill(arr, 1, 3, 20);System.out.println(Arrays.toString(arr));}
}

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

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

相关文章

第三十四章 Vue路由进阶之声明式导航(导航高亮)

目录 一、导航高亮 1.1. 基于语法 1.2. 主要代码 二、声明式导航的两个类名 2.1. 声明式导航类名匹配方式 2.2. 声明式导航类名样式自定义 ​2.3. 核心代码 一、导航高亮 1.1. 基于语法 在Vue中通过VueRouter插件&#xff0c;我们可以非常简单的实现实现导航高亮效果…

基于Multisim数控直流稳压电源电路(含仿真和报告)

【全套资料.zip】数控直流稳压电源电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.输出直流电压调节范围5-12V。 2.输出电流0-500mA。 3.输出直流电压能步进调节&#xff0c;步…

3D Gaussian Splatting 入门

1 摘要 3D Gaussian Splatting是一种将点云表示为高斯分布&#xff08;Gaussian Distributions&#xff09;的方法&#xff0c;用于3D重建、渲染等领域。这种方法通过在3D空间中对点云进行参数化&#xff0c;使得每个点不仅有位置&#xff08;XYZ坐标&#xff09;&#xff0c;还…

快速遍历包含合并单元格的Word表格

Word中的合并表格如下&#xff0c;现在需要根据子类&#xff08;例如&#xff1a;果汁&#xff09;查找对应的品类&#xff0c;如果这是Excel表格&#xff0c;那么即使包含合并单元格&#xff0c;也很容易处理&#xff0c;但是使用Word VBA进行查找&#xff0c;就需要一些技巧。…

微服务系列四:热更新措施与配置共享

目录 前言 一、基于Nacos的管理中心整体方案 二、配置共享动态维护 2.1 分析哪些配置可拆&#xff0c;需要动态提供哪些参数 2.2 在nacos 分别创建共享配置 创建jdbc相关配置文件 创建日志相关配置文件 创建接口文档配置文件 2.3 拉取本地合并配置文件 2.3.1 拉取出现…

抖音短剧小程序上线:短视频平台的全新娱乐体验

抖音短剧小程序的开发是一个结合了创意与技术的过程&#xff0c;旨在通过简洁而富有吸引力的方式&#xff0c;向用户提供高质量的短剧内容。随着移动互联网的快速发展&#xff0c;短视频平台成为了人们日常生活中不可或缺的一部分&#xff0c;而短剧作为一种新兴的内容形式&…

【解决】Ubuntu18.04 卸载python之后桌面异常且终端无法打开,重启后进入tty1,没有图形化界面

我因为python版本太过于混乱 &#xff08;都是为了学习os&#xff09; &#xff0c;3.6—3.9版本我都安装了&#xff0c;指向关系也很混乱&#xff0c;本着“重装是最不会乱”的原则&#xff0c;我把全部版本都卸载了。然后装了3.9 发现终端打不开了&#xff0c;火狐浏览器的图…

Golang | Leetcode Golang题解之第521题最长特殊序列I

题目&#xff1a; 题解&#xff1a; func findLUSlength(a, b string) int {if a ! b {return max(len(a), len(b))}return -1 }func max(a, b int) int {if b > a {return b}return a }

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-13

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

二叉树中的深搜 算法专题

二叉树中的深搜 一. 计算布尔二叉树的值 计算布尔二叉树的值 class Solution {public boolean evaluateTree(TreeNode root) {if(root.left null) return root.val 0? false: true;boolean left evaluateTree(root.left);boolean right evaluateTree(root.right);return…

VisionPro —— CogPatInspectTool对比工具

一、CogPathInspectTool工具简介 CogPathInspectTool是VisionPro重要的工具&#xff0c;主要用于缺陷检测&#xff0c;通过将当前图像与“训练图像”对比&#xff0c;获取“原始差异图像”&#xff0c;再将“原始差异图像”与“阈值图像”进行对比&#xff0c;进而获取“阈值差…

Linux 系统启动

1.Linux系统启动过程 Linux系统启动过程可以分为5个阶段&#xff1a;内核的引导、运行 init、系统初始化、建立终端、用户登录系统。 2.内核引导 当计算机打开电源后&#xff0c;首先是BIOS开机自检&#xff0c;按照BIOS中设置的启动设备&#xff08;通常是硬盘&#xff09;来启…

Qt 坐标系统与坐标变换

Qt 坐标系统与坐标变换 坐标变换函数 QPainter坐标变换相关函数 分组函数原型功能坐标变换void translate(qreal dx,qreal dy)坐标系统一定的偏移量&#xff0c;坐标原点平移到新的点void rotate(qreal angle)坐标系统顺时针旋转-一个角度void scale(qreal sx,qreal sy)坐标…

奥数与C++小学四年级(第十六题 魔法学院)

参考程序代码&#xff1a; #include <iostream>int main() {int maxStudentsPerSubject 9; // 每个科目最多有9个比哈利高的学生int students maxStudentsPerSubject * 3; // 三个科目// 加上哈利自己int totalStudents students 1;std::cout << "最大学…

高空作业未系安全带监测系统 安全带穿戴识别预警系统

在各类高空作业场景中&#xff0c;安全带是保障作业人员生命安全的关键防线。然而&#xff0c;由于人为疏忽或其他原因&#xff0c;作业人员未正确系挂安全带的情况时有发生&#xff0c;这给高空作业带来了巨大的安全隐患。为有效解决这一问题&#xff0c;高空作业未系安全带监…

备战“双11”丨AI+物流:你的快递会有什么变化?

背景 在中国&#xff0c;每天有数以亿计的包裹在运输&#xff0c;尤其在电商促销季如“双十一”、“618”期间&#xff0c;快递量更是激增。快递物流行业面临人员短缺、配送效率低下和物流承载能力有限等问题。快瞳科技提供的AI识别解决方案通过智能化手段提高工作效率和配送准…

Cesium的PickModel浅析

Cesium中的拣选(pick)具备一套比较巧妙机制&#xff0c;。可以简单的认为&#xff0c;Cesium的常规的鼠标拣选是基于最终成图做的。就如同下面的这幅画&#xff0c;红色的箭头指向牛的臀&#xff0c;而不是后面的房子&#xff0c;是因为牛挡住了房子。这是一种比较自然的理解方…

针对告警数量、告警位置、告警类型等参数进行统计,并做可视化处理的智慧能源开源了

一、简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算…

【教学类-12-10】20241104《连连看竖版6*6 (3套题目空心图案)中2班

【教学类-12-09】20230228《连连看竖版6*6 &#xff08;3套题目空心图案&#xff08;中班教学&#xff09;》&#xff08;中班主题《玩具总动员》)-CSDN博客文章浏览阅读121次。【教学类-12-09】20230228《连连看竖版6*6 &#xff08;3套题目空心图案&#xff08;中班教学&…

Windows系统使用diskpart命令格式化U盘

Windows系统使用diskpart命令格式化U盘 1、以管理员身份运行CMD命令提示符 2、输入【diskpart】进入diskpart命令行界面 3、输入【list disk】命令&#xff0c;查看本机所有磁盘 4、这里以格式化【磁盘4】为列&#xff0c;输入【select disk 4】命令&#xff0c;选择磁盘4…