前面学习了一维数组的使用和内存图的关系,今天学习可变参数与数组工具类的使用
1.可变参数
我们在进行数组的声明时,需要将数组进行初始化,如果现在有一个需求:
1.设计一个方法,传入两个int值进行比较,返回最大值
2.设计一个方法,传入三个int值进行比较,返回最大值
3.设计一个方法,传入三个int值进行比较,返回最大值
...................
按照正常的思路,我们有多少个需求就要写多少个方法,但是这样不仅非常低效,还会造成程序易读性变差,所以我们可以使用可变参数,比如我们用可变参数来实现这个需求:
public class Test{
public static void main(String[] args){
int max = getMax(1,2,3,4);//传入的参数作为元素压入到数组中
System.out.println("最大值为:" + max);
}
public static int getMax(int... is){
if(is.length != 0){//判断调用该方法时是否传入参数
int max = is[0];
for(int i = 1;i<is.length;i++){
if(max < is[i]){
max = is[i];
}
}
return max;
}
return 0;
}
}
这样我们在无论传入多少个数据,我们都能返回其中最大值,不用在去每一个需求写一个方法。那么我们在声明可变参数时,在可变参数的后面不允许声明其他参数,否则就会报错,因为程序无法判断在可变参数后面应该怎么去压入元素,但是可以在可变参数前面声明变量,比如:
public static void getMax(int i,String... t){
}
这样在传入的时候,第一个元素会赋值给元素i,剩下的元素就会压入到t中。
总结:
1.可变参数底层就是数组
2.形参为可变参数,调用时可以根据需求传参或不传参
3.调用时传入的数据作为元素压入到数组中
4.可变参数后面不允许声明其他参数
2.Arrays工具类
我们在使用前要首先导入这个工具类
import java.util.Arrays;
1.排序
语法:
Arrays.sort(数组名);
例子:
import java.util.Arrays;
public class Test{
public static void main(String... args){
int[] is = {67,45,81,24,16};
//排序 - 16,24,45,67,81
Arrays.sort(is);
}
}
这样就排序好了,默认是从小到大
2.查找
语法:
int index = Arrays.binarySearch(数组名,查找值);
例子:
import java.util.Arrays;
public class Test{
public static void main(String... args){
int[] is = {67,45,81,24,16};
//查找/搜索
//如果key在数组中,就返回下标;否则,返回 -插入点-1
int key = 51;
int index = Arrays.binarySearch(is,key);
System.out.println("查询到元素的下标为:" + index);//-4
}
}
3.替换
语法:
Arrays.fill(数组名,替换值);
Arrays.fill(数组名,开始下标,结束下标,替换值);
例子:
import java.util.Arrays;
public class Test{
public static void main(String... args){
int[] is = {67,45,81,24,16};
//全部替换
Arrays.fill(is,888);
//局部替换
Arrays.fill(is,1,3,666);
}
}
4.扩容/复制
语法:
int[] copy = Arrays.copyOf(目标数组,新的长度)//扩容
int[] copy = Arrays.copyOfRange(数组名,开始下标,结束下标);//复制
例子:
import java.util.Arrays;
public class Test14{
public static void main(String... args){
int[] is = {67,45,81,24,16};
//扩容
int[] copyOf = Arrays.copyOf(is,is.length*2);//copyOf(目标数组,新的长度)
//局部拷贝
int[] copyOfRange = Arrays.copyOfRange(copyOf,2,5);copyOfRange(目标数组,开始下标-包含,结束下标-不包含)
}
}
5.将数组转换为字符串
语法:
String str = Arrays.toString(数组名);
例子:
import java.util.Arrays;
public class Test14{
public static void main(String... args){
int[] is = {67,45,81,24,16};
//将数组转换为字符串
String str = Arrays.toString(is);
System.out.println(str);
}
}