JavaSE基础篇:数组
创建数组
package com.cl.Array; public class ArrayDemo01 { //变量类型 变量名字 = 变量的值 //数组类型 public static void main(String[] args) { int[] nums;//1.声明一个数组 nums=new int[10];//2.创建一个数组,这里面可存放10个int类型的数字 //相当于int[] nums=new int[10] //3.赋值 nums[0]=1; nums[1]=2; nums[2]=3; nums[3]=4; nums[4]=5; nums[5]=6; nums[6]=7; nums[7]=8; nums[8]=9; nums[9]=10; //计算所有元素的和 int sum=0; //获取数组长度: arrays.length for (int i = 0; i < nums.length; i++) { sum+=nums[i]; } System.out.println("总和为:"+sum); } }
数组的使用
package com.cl.Array; //数组的使用 public class ArrayDemo03 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; //例子1:打印全部的数组元素 for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } System.out.println("================"); //例子2:计算所有元素的和 int sum=0; for (int i = 0; i < arrays.length; i++) { sum+=arrays[i]; } System.out.println("sum="+sum); System.out.println("================"); //例子3:查找最大元素 int max=arrays[0]; for (int i = 1; i < arrays.length; i++) { if (arrays[i]>max){ max=arrays[i]; } } System.out.println("max="+max); } }
数组的初始化
package com.cl.Array; //三种数组初始化的状态 public class ArrayDemo02 { public static void main(String[] args) { //静态初始化 int[] a={1,2,3,4,5,6,7,8};//静态数组初始化 System.out.println(a[0]); //动态初始化,引用类型(除了八大基本类型都是引用类型) //数组没有被初始化的,默认都为0 int[] b=new int[10]; b[0]=10; System.out.println(b[0]); System.out.println(b[1]); } } //小结:长度是确定的,数组一旦被创建,他的大小就不可改变 // 其元素必须是相同类型,不允许出现混合类型 // 数组中的元素可以是任何数据类型,包括基本类型和引用类型 // 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量 // 数组本身就是对象,java中对象是在堆中,因此数组无论保存原始类型还是其他对象类型 // !!数组对象本身是在堆中
数组反转
package com.cl.Array; //数组进阶例子(数组反转) public class ArrayDemo04 { public static void main(String[] args) { int [] arrays={1,2,3,4,5}; //JDK1.5以上,取不到下标 //array代表数组中的元素,arrays代表数组名 for (int array : arrays) { System.out.println(array); } printArray(arrays); System.out.println(); printArray(reverse(arrays)); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } //!!!反转数组 public static int[] reverse(int[] arrays){ int[] result=new int[arrays.length]; //反转操作 for (int i = 0,j=result.length-1; i <arrays.length ; i++,j--) { //把main中的数组第一个位置的元素放到result数组的尾部,实现反转操作 result[j]=arrays[i]; } return result; } }
多维数组
package com.cl.Array; //数组进阶例子(数组反转) public class ArrayDemo04 { public static void main(String[] args) { int [] arrays={1,2,3,4,5}; //JDK1.5以上,取不到下标 //array代表数组中的元素,arrays代表数组名 for (int array : arrays) { System.out.println(array); } printArray(arrays); System.out.println(); printArray(reverse(arrays)); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } //!!!反转数组 public static int[] reverse(int[] arrays){ int[] result=new int[arrays.length]; //反转操作 for (int i = 0,j=result.length-1; i <arrays.length ; i++,j--) { //把main中的数组第一个位置的元素放到result数组的尾部,实现反转操作 result[j]=arrays[i]; } return result; } }
Arrays工具类
package com.cl.Array; import java.util.Arrays; //Arrays工具类拓展 public class ArrayDemo06 { public static void main(String[] args) { int[] a={1,2,3,4,3333,4444,555}; //排序 Arrays.sort(a); //打印数组元素Arrays.toString System.out.println(Arrays.toString(a)); } }
冒泡排序
package com.cl.Array; import java.util.Arrays; //冒泡排序 public class ArrayDemo067 { public static void main(String[] args) { int[] a={1,3,4,7,2,4,0}; int[] sort=sort(a);//调用自己写的排序方法 System.out.println(Arrays.toString(sort)); } //比较数组中两个相邻的元素,如果第一个数比第二个数大,就交换位置 //每一次比较都会产生出一个最大或最小的数字 //下一轮则可以少一次排序,直到技术 public static int[] sort(int[] array){ //临时变量 int temp=0; //外层循环:判断要走多少次 for (int i = 0; i < array.length-1; i++) { //内层循环:如果第一个数比第二个数大则交换位置 for (int j = 0; j< array.length-1-i; j++) { if (array[j+1]>array[j]){ temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } return array; } }
//数组扩展:稀疏数组
先看一张图:这是稀疏数组的结果
//编写五子棋游戏中,有存盘退出和需上盘的功能 //分析:因为该二维数组很多值是默认值0,因此记录了很多没有意义的数据 //解决:稀疏数组 public class ArrayDemo08 { public static void main(String[] args) { //1.创建一个二维数组11*11 0:没有棋子, 1:黑棋 2:白棋 int[][] array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; //输出原始数组 System.out.println("输出原始数组"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } System.out.println("====================="); //转换稀疏数组保存 //获取有效值个数 int sum=0; for (int i = 0; i <11 ; i++) { for (int j = 0; j <11 ; j++) { if (array1[i][j]!=0){ sum++; } } } System.out.println("有效值个数:"+sum); //2.创建一个稀疏数组的数组 int[][] array2=new int[sum+1][3]; //第一行存储行数,列数,有效值个数 array2[0][0]=11; array2[0][1]=11; array2[0][2]=sum; //遍历二维数组,将非零的值,存在稀疏数组中 int count=0; for (int i = 0; i <array1.length ; i++) { for (int j = 0; j <array1[i].length ; j++) { if (array1[i][j]!=0){ count++; array2[count][0]=i;//横坐标 array2[count][1]=j;//纵坐标 array2[count][2]=array1[i][j];//值 } } } //输出稀疏数组 System.out.println("稀疏数组"); for (int i = 0; i < array2.length; i++) { System.out.println(array2[i][0]+"\t" +array2[i][1]+"\t" +array2[i][2]+"\t"); } System.out.println("======================="); System.out.println("还原"); //1.读取稀疏数组 int[][] array3=new int[array2[0][0]][array2[0][1]]; //2.给其中元素还原它的值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]]=array2[i][2]; } //3.打印 System.out.println("输出还原数组"); for (int[] ints : array3) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } } } //注:只给有值的地方赋值其他地方都是默认的值:0
最后代码实现的结果
1.稀疏数组结果,
注:稀疏数组的第一行代表着原始数组有11行 11列 2个非零的值
2.还原稀疏数组