有关数组的方法
- 💥增强的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}
}
博主用心写,读者点关注,互动传真情,知识不迷路