Java语言程序设计——篇五(2)

有关数组的方法

  • 💥增强的for循环
    • 实战演练
  • 数组元素的复制
    • 实战演练
  • 数组参数与返回值
  • 💢java.util.Arrays类
    • 数组的排序
      • 实战演练
    • 元素的查找
    • 数组元素的复制
    • 填充数组元素
    • 数组的比较
      • 实战演练

💥增强的for循环

增强的for循环,它是Java 5新增功能。用来迭代数组或对象集合的每个元素。
局限性:只能按顺序访问数组中元素。

它的一般格式为:

for(元素类型 变量名:数组名) {
// 循环体
}

例:输出marks数组中每个元素:

for( double score : marks ) {System.out.println(score);}
  • 每次从数组marks中取出一个元素,自动赋给score 。
  • 用户不用判断是否超出了数组的长度。
  • score的类型必须与数组marks中元素的类型相同。

实战演练

例:输出整型数组a中的元素内容

 public class Exam{public static void main(String[] args){int [] a = {1,2,3,4};for( int i : a )System.out.println(i);}
}

数组元素的复制

1、一个元素一个元素复制。
2、使用System.arraycopy()方法。
3、使用Arrays类的copyOf()或copyOfRange()方法。

  • 1、一个元素一个元素复制
int []source = {10,20,30,40};  //源数组
int []target  = new int[source.length] ;//目标数组
for ( int i=0; i < source.length; i++ ){target[i]=source[i];System.out.print(target[i]+" ");
}
  • 2、使用System类的arraycopy()方法
public static void arraycopy(Object  src, int srcPos, Object dest, int destPos, int length)
src:源数组,即要从中复制元素的数组。
srcPos:源数组中的起始位置(包含),即从哪里开始复制元素。
dest:目标数组,即要复制元素进去的数组。
destPos:目标数组中的起始位置(包含),即从哪里开始放置复制的元素。
length:要复制的数组元素的数量。
例:
int []source = {10,20,30,40};  //源数组
int []target  = new int[source.length] ;//目标数组
System.arraycopy(source, 0, target, 0, 4);

arraycopy()方法可以将源数组的一部分元素复制到目标数组中

实战演练

package com.demo;
public class ArrayCopyDemo{public static void main(String[] args){int[] a = {1,2,3,4};int[] b = {8,7,6,5,4,3,2,1};int[] c = {10,20};try{System.arraycopy(a, 0, b, 0, a.length);// 下面语句发生异常,目标数组c容纳不下原数组a的元素System.arraycopy(a, 0, c, 0, a.length);}catch(ArrayIndexOutOfBoundsException e){System.out.println(e);}for(int elem: b){System.out.print(elem+"  ");}System.out.println();for(int elem: c){System.out.print(elem+"  ");}System.out.println("\n");}
}

运行结果:
在这里插入图片描述

  • 3、使用Arrays类的copyOf()或copyOfRange()方法。
    在Java中,Arrays 类提供了两个非常有用的静态方法用于数组的复制:copyOf() 和 copyOfRange()。这两个方法都是用来创建并返回指定数组的一个新副本,但它们之间有一些关键的区别。
    1. copyOf() 方法
    copyOf() 方法用于创建一个具有指定长度的新数组,并将原始数组的元素复制到新数组中。如果新数组的长度大于原始数组的长度,则新数组中的剩余元素将被初始化为该类型的默认值(例如,对于对象数组,这些元素将是 null;对于整数数组,它们将是 0)。
    语法:
public static T[] copyOf(T[] original, int newLength)
  • original 是要复制的原始数组。
  • newLength 是新数组的长度。
    示例
import java.util.Arrays;  public class Main {  public static void main(String[] args) {  int[] original = {1, 2, 3};  int[] copy = Arrays.copyOf(original, 5); // 新数组长度为5,额外两个元素将初始化为0  System.out.println(Arrays.toString(copy)); // 输出:[1, 2, 3, 0, 0]  }  
}

2. copyOfRange() 方法
copyOfRange() 方法用于复制指定数组的指定范围到新数组中。你可以指定要复制的起始位置(包含)和结束位置(不包含),然后该方法会创建一个包含这些元素的新数组。

语法:

public static T[] copyOfRange(T[] original, int from, int to)
  • original 是要复制的原始数组。
  • from 是复制的起始位置(包含)。
  • to 是复制的结束位置(不包含)。
    示例
import java.util.Arrays;  public class Main {  public static void main(String[] args) {  int[] original = {1, 2, 3, 4, 5};  int[] copy = Arrays.copyOfRange(original, 1, 4); // 复制从索引1(包含)到索引4(不包含)的元素  System.out.println(Arrays.toString(copy)); // 输出:[2, 3, 4]  }  
}

注意事项

  • 如果 from 等于 to,则结果为长度为 0 的数组,而不是 null。
  • 如果 from 或 to 超出原始数组的范围,则会抛ArrayIndexOutOfBoundsException。
  • 这两个方法都返回原始数组的一个新副本,对返回的数组所做的任何修改都不会影响原始数组。
    使用 copyOf() 和 copyOfRange() 方法可以方便地处理数组复制的需求,特别是在需要根据条件复制数组的一部分或需要调整数组大小时。
    不能用下面的方法实现数组元素的复制
double[] marks = {79, 84.5, 63, 90, 98};
double[]  target = marks;

数组参数与返回值

数组可以作为方法的参数和返回值。
可以将数组对象作为参数传递给方法,例如下面代码定义了一个求数组元素和的方法。

  public static double sumArray(double array[]){}

一个方法也可以返回一个数组对象,例如,下面的方法返回参数数组的元素反转后的一个数组。

  public static int[] reverse(int[] list){}

💢java.util.Arrays类

java.util.Arrays类定义若干静态方法对数组操作,包括:

  • 对数组排序
  • 在已排序的数组中查找指定元素
  • 数组元素的拷贝
  • 将一个值填充到数组的每个元素中
  • 比较两个数组是否相等

数组的排序

使用Arrays类的sort()方法可以对数组元素排序。

public static void sort( int []a):对数组a按升序排序
public static void sort( int []a, int fromIndex, int toIndex):对数组a中元素从起始下标fromIndex到终止下标toIndex之间的元素按升序排序
public static void sort( Object []a):对数组a按自然顺序排序
public static void sort(Object []a, int fromIndex, int toIndex):对数组a中元素从起始下标fromIndex到终止下标toIndex之间的元素排序

实战演练

package shujia_test1;import java.util.Arrays;public class Csdn5_6 {public static void main(String[] args) {int[] a = { 4, 18, 6, 10, 25, 3 };// int []a=new int[] {4,18,6,10,25,3};Arrays.sort(a);for (int i = 0; i < a.length; i++)System.out.print(a[i] + " ");}
}

在这里插入图片描述

元素的查找

对排序后的数组可以使用Arrays类的binarySearch()方法从中快速查找指定元素。

public static int binarySearch( int []a, int key)
public static int binarySearch(Object []a, Object key)

对给定的键值,查找该值在数组中的位置。
如果查找成功,则返回该值的下标值。
如果查找不成功,则返回值为: -插入点-1

int []a = new int[] {1,5,7,3};
Arrays.sort(a);  //1,3,5,7
int i =Arrays.binarySearch(a,7);
System.out.println( i );  //输出3
int i =Arrays.binarySearch(a,4);
System.out.println( i );  //输出-3

数组元素的复制

使用Arrays类的copyOf()方法将一个数组中的全部元素复制到另一个数组中。

public static int[] copyOf(int []original, int newLength)
int []a = new int[] {3,7,9};
int []newArray = Arrays. copyOf(a,4);
newArray 中:3 7 9 0(int默认值)

使用Arrays类的copyOfRange()方法将源数组中指定位置开始的若干元素复制到目标数组中。

public static int[] copyOfRange (int []original, int from, int to)不包括
char[] letter = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’,};
letter = Arrays. copyOfRange (letter,1,5);
letter 中: ‘b’ ‘c’ ‘d’ ‘e’

填充数组元素

使用Arrays类的fill()方法可以将一个值填充到数组的每个元素中,或几个连续的元素中。

public static void fill( int []a, int val ):
用指定的val值填充数组a中的每个元素
public static void fill( int []a, int fromIndex, int toIndex , int val ) 
用指定的val值填充数组a中从起始下标fromIndex到终止下标toIndex(不包括)的每个元素
例: int[] a = new int[5];Arrays.fill(a, 47);a 中: 47 47 47 47 
public static void fill( Object []a , Object val )
public static void fill(Object []a, int fromIndex, int toIndex , Object val )

数组的比较

使用Arrays类的equals()方法可以比较两个数组对应元素是否相同,要求比较的两个数组数据类型相同且元素个数相同。

public static boolean equals( int []a , int []b )
比较整型数组a与b是否相等
public static boolean equals( Object []a , Object []b )
比较对象数组a与b是否相等

实战演练

package shujia_test1;import java.util.Arrays;public class Csdn5_7 {public static void main(String[] args) {int[] a1 = new int[10];int[] a2 = new int[10];Arrays.fill(a1, 47);Arrays.fill(a2, 47);System.out.println(Arrays.equals(a1, a2)); // 输出truea2[3] = 11;System.out.println(Arrays.equals(a1, a2)); // 输出falseString[] s1 = new String[5];Arrays.fill(s1, "Hi");String[] s2 = { "Hi", "Hi", "Hi", "Hi", "Hi" };System.out.println(Arrays.equals(s1, s2)); // 输出true}
}

在这里插入图片描述
博主用心写,读者点关注,互动传真情,知识不迷路

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

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

相关文章

MySQL(6)内置函数,复合查询.

目录 1.内置函数; 2.复合查询; 1.内置函数: 1.1 日期函数: 时分秒: 时间戳: 基本日期上加日期: 基本日期减去日期: 日期相差天数: &#x1f330; 创建一张表&#xff0c;记录生日: 创建一个留言表: 显示所有留言信息&#xff0c;发布日期只显示日期&#xff0c;不用显示时间: …

tree组件实现折叠与展开功能(方式1 - expandedTree计算属性)

本示例节选自vue3最新开源组件实战教程大纲&#xff08;持续更新中&#xff09;的tree组件开发部分。考察响应式对象列表封装和computed计算属性的使用&#xff0c;以及数组reduce方法实现结构化树拍平处理的核心逻辑。 实现思路 第一种方式&#xff1a;每次折叠或展开后触发…

node管理工具nvm

使用nvm可以切换node版本、命令安装node 一、nvm下载安装 1、下载 nvm-setup.zip - 蓝奏云 在github可以选择最新版的【nvm】&#xff1a;&#xff08;nvm-windows 最新下载地址&#xff09;Releases coreybutler/nvm-windows GitHub nvm-noinstall.zip&#xff1a; 这个…

基于edk2编译arm64版intel网卡undi驱动

本文介绍如何在edk2下面编译intel undi驱动。 edk2版本edk2-stable202305 文章目录 一、源码下载二、驱动编译2.1 第一次编译IntelXGigUndi及修改2.2 Intel其他undi驱动编译三、驱动二进制文件四、驱动使用方法一、源码下载 intel 网卡驱动下载地址 https://www.intel.com/con…

MySQL 数据库 - 事务

MySQL 数据库&#xff08;基础&#xff09;- 事务 事务简介 事务 是一组操作集合&#xff0c;他是一个不可分割的工作单位&#xff0c;事务会把所有的操作看作是一个整体一起向系统发送请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 比如&#xff1a;张…

C#医学影像管理系统源码(VS2013)

目录 一、概述 二、系统功能 系统维护 工作站 三、功能介绍 影像采集 统计模块 专业阅片 采集诊断报告 报告管理 一、概述 医学影像存储与传输系统&#xff08;PACS&#xff09;是一种集成了影像存储、传输、管理和诊断功能的系统。它基于数字化成像技术、计算机技术和…

STM32CubeMX配置STM32G071输入捕获(HAL库开发)

1.时钟配置HSI主频配置64M 2.配置好串口&#xff0c;选择异步模式 3.配置TIM1_CH1产生1KHz的信号&#xff0c;主频64MHz&#xff0c;分频&#xff08;64-1&#xff09;&#xff0c;计数周期&#xff08;1000-1&#xff09;&#xff0c;这样即可生成1KHz信号。 4.配置TIM3_CH1和…

农业旅游与乡村旅游:融合绿色田野与诗意远方的经济新篇章

在这个快节奏的时代&#xff0c;人们对于回归自然、体验淳朴生活的渴望日益增强。农业旅游与乡村旅游&#xff0c;作为新兴的旅游形态&#xff0c;正逐步成为连接城市与乡村的桥梁&#xff0c;不仅为都市人提供了一片心灵的栖息地&#xff0c;也为农村地区带来了前所未有的发展…

昇思25天学习打卡营第15天|munger85

K近邻算法实现红酒聚类 现在数据集这个就是红酒的分类的数据集红酒每一个都会有很多的属性有三个属性下载数据集&#xff0c;这个是红酒的分类的数据集&#xff0c;红酒每一个都会有很多的属性&#xff0c;有三个属性。这十三个属性就可以用来分辨它是哪一个13个属性就可以用来…

Nacos部署升级1.4.2到2.3.1版本

一.下载安装&#xff1a; https://github.com/alibaba/nacos/releases/download/2.3.1/nacos-server-2.3.1.zip 下载完成解压即可 二.新旧版本数据结构有变化需要同步数据结构&#xff1a; ALTER TABLE config_info ADD encrypted_data_key TEXT NOT NULL COMMENT ‘秘钥’;…

【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录 前言一、提供者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 二、消费者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 三、服务列表四、服务发现1. 获取服务列表2. 测试2.1 获取所有服务2.2 根据服务名获取服务信息 五、更多配置项总结 前言 本节通过…

hot100 | 十四、贪心

1-leetcode121. 买卖股票的最佳时机 注意&#xff1a; Labuladong的套路太厉害了&#xff0c;分析的很清晰状态转移方程 public int maxProfit(int[] prices) {int n prices.length;int[][] dp new int[n][2];for (int i 0; i < n; i) {if (i-1 -1){// base casedp[…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2&#xff0c;MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据&#xff0c;登录新增随机数字验证码验证。具体可以看…

Ruby爬虫技术:深度解析Zhihu网页结构

在互联网时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是在社交媒体和问答平台如Zhihu&#xff08;知乎&#xff09;上&#xff0c;用户生成的内容蕴含着丰富的信息和洞察。本文将深入探讨如何使用Ruby爬虫技术来解析Zhihu的网页结构&#xff0c;并获取有价值的数据。 …

泛域名ssl生成

ssl生成 参考文档 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E安装acme curl https://get.acme.sh | sh -s email[此处放githup的邮箱]例&#xff1a;curl https://get.acme.sh | sh -s emailmyexample.com手动 dns 方式 // 1.触发验证&#xf…

某安居客滑块验证码

⚠️前言⚠️ 本文仅用于学术交流。 学习探讨逆向知识&#xff0c;欢迎私信共享学习心得。 如有侵权&#xff0c;联系博主删除。 请勿商用&#xff0c;否则后果自负。 网址 aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0 …

精准营销从数据开始,Xinstall为App增长插上翅膀,安装数据尽在掌握!

在这个信息爆炸的时代&#xff0c;App市场竞争日益激烈&#xff0c;如何精准获取并分析安装数据&#xff0c;成为了每一个App开发者和运营者必须面对的重要课题。数据&#xff0c;是指导我们行动的灯塔&#xff0c;是优化策略、提升转化的关键。然而&#xff0c;对于许多开发者…

Mybatis<collection>实现一对多

时隔多年又用到这样的查询方式了,提前声明一下分页最后返回的数据会小于每页条数&#xff0c;废话不多说直接上代码&#xff01; Data public class PbcUserTargetTaskPageVO {ApiModelProperty("个人绩效指标id")private Long id;ApiModelProperty("月份"…

大模型中的采样(Sampling)选择机制详解

大模型中的采样选择机制详解 在自然语言处理&#xff08;NLP&#xff09;和生成模型&#xff08;如GPT&#xff09;中&#xff0c;采样选择机制是一种从模型的概率分布中选择词的方法&#xff0c;用于控制生成文本的多样性和质量。本文将详细介绍几种经典的采样选择机制&#…

计算机毕业设计-基于Springboot的养老院管理系统-源码程序文档

项目源码&#xff0c;请关注❥点赞收藏并私信博主&#xff0c;谢谢~ 本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写&#xff0c;禁止任何人抄袭以及各类盈利性传播&#xff0c; 相关的代码部署论文ppt代码讲解答辩指导文件…