Java数组类型的参数与排序
一、数组类型的参数?
方法调用时,将nums中的地址赋值给oneArray,此时二者指向同一个数组。
传递参数时:基本类型传递的是变量中的值;引用类型传递的是变量中的地址。
1.1数组类型的返回值
调用数组类型返回值的方法时,方法执行后,返回的是数组的地址。
二、可变长参数
2.1 可变长参数
概念:可接收多个同类型实参,个数不限,使用方式与数组相同。
语法:数据类型... 形参名 //必须定义在形参列表的最后,且只能有一个。
三、数组的排序【重点】
3.1 数组的排序
冒泡排序
冒泡排序:相邻的两个数值比较大小,互换位置。
/**
* 冒泡排序方法 给定一个参数 为int[] 数组
*
* @param arrs
*/
public static void Bubbling(int[] arrs) {
// 外层循环 控制 循环的次数
for (int i = 0; i < arrs.length - 1; i++) {
// 内层循环 控制数字两两对比的次数
for (int j = 0; j < arrs.length - 1 - i; j++) {
// 两两对比数字的比较
if (arrs[j] > arrs[j + 1]) {
// 两个数字进行交换
int tmpe = arrs[j];
arrs[j] = arrs[j + 1];
arrs[j + 1] = tmpe;
}
}
}
for (int i = 0; i < arrs.length; i++) {
System.out.println(arrs[i]);
}
}
选择排序
选择排序:固定值与其他值依次比较大小,互换位置
/**
* 选择排序
*
* @param arrs
*/
public static void arrs(int[] arrs) {
// 外层控制循环次数
for (int i = 0; i < arrs.length - 1; i++) {
// 内层进行一一比较 先取一个最小值 arrs[i] 跟后面的一一比较
for (int j = i + 1; j < arrs.length; j++) {
// 用arrs[i]跟后面 的数字一一比较
if (arrs[i] > arrs[j]) {
int temp = arrs[i];
arrs[i] = arrs[j];
arrs[j] = temp;
}
}
}
for (int i = 0; i < arrs.length; i++) {
System.out.println(arrs[i]);
}
}
JDK排序:java.util.Arrays.sort(数组名)。
import java.util.Arrays;
public class TestSort{
public static void main(String[] args){
int[] nums = new int[]{4,3,5,2,1};
//借助JDK提供的数组工具,进行排序
Arrays.sort(nums);
//第一次遍历(升序)
for(int i = 0 ; i < nums.length ; i++){
System.out.println(nums[i]);
}
//降序:需要手工的方式完成元素的倒置 5 2 3 4 1
for(int i = 0 ; i < nums.length / 2 ; i++){// i = 0
int temp = nums[i];// int temp = 1;
nums[i] = nums[ nums.length - 1 - i];
nums[ nums.length - 1 - i] = temp;
}
//第二次遍历(降序)
for(int i = 0 ; i < nums.length ; i++){
System.out.println(nums[i]);
//两值交换,借助第三变量
/*
int a = 10;
int b = 20;
int c = a;//将a中的值保存在c中
a = b;//将b中的值保存在a中
b = c;//将c中的值保存在b中
*/
}
}
}
四、 二维数组
4.1二维数组的概念
概念:一维数组中的一维数组;数组中的元素,还是数组。
简单去理解他:
二维数组实际上是一个一维数组,只是他的每个元素都是一维的数组
4.2 二维数组的赋值
使用双下标访问二维数组中的元素:
第一个下标代表:行号(高维下标)。
第二个下标代表:列号(低维下标)。
二维数组元素的默认初始化值
//针对于初始化方式一:比如:int[][] array = new int[4][3];
//外层元素的初始化值为:地址值
//内层元素的初始化值为:与一维数组初始化情况相同
//针对于初始化方式二:比如:int[][] array = new int[4][];
//外层元素的初始化值为:null
//内层元素的初始化值为:不能调用,否则报错。
4.3 二维数组的内存分配
高维数组中的每一个元素,保存了低维数组的地址。访问array[0]等价于在访问0x0000A111。
4.4 二维数组的访问
4.5 二维数组创建语法
先声明、再分配空间:
数据类型[][] 数组名;
数组名 = new 数据类型[高维长度][低维长度];
声明并分配空间:
数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];
声明并赋值(繁):
数据类型[][] 数组名 = new 数据类型[高维长度][]; (不规则数组,自行new低维数
组)。
声明并赋值(简):
数据类型[][] 数组名 = { {v1,v2,v3},{v4,v5},{v6,v7,v8,v9} }; (显示初始化)。
public class Test2DArray2{
public static void main(String[] args){
int[][] array = new int[3][]; //只有高维空间,没有低维空间
array[0] = new int[5];
array[1] = new int[3];
array[2] = new int[7];
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[0].length);
System.out.println(array[1].length);
System.out.println(array[2].length);
for(int i = 0 ; i < array.length ; i++){
for(int j = 0 ; j < array[i].length ; j++){
System.out.print(array[i][j] +"\t");
}
System.out.println();
}
//显示初始化
int[][] numbers = { {1,2,3} , {4,5,6,7} , {8,9} };
System.out.println(numbers.length);
System.out.println("--------------");
System.out.println(numbers[0].length);
System.out.println(numbers[1].length);
System.out.println(numbers[2].length);
}
}