数组的使用
数组的使用:
1.For-Each循环
package com.zsw.array;
public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建+赋值
int[] a={1,2,3,4,5,6,7,8};
// 查找最大值
int max=a[0];
for (int i = 1; i <a.length ; i++) {
if(max<a[i]){
max=a[i];
}
}
System.out.println(max);
}
}
2.数组作方法入参
package com.zsw.array;
public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建+赋值
int[] a={1,2,3,4,5,6,7,8};
printArray(a);
}
//写个方法打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i <arrays.length ; i++) {
System.out.print(arrays[i]+" ");
}
}
}
3.数组作返回值
package com.zsw.array;
public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建+赋值
int[] a={1,2,3,4,5,6,7,8};
printArray(a);
int[] b=reverse(a);
printArray(b);
}
//写个方法打印数组元素
public static void printArray(int[] arrays){
System.out.println("===调用printArray方法===");
for (int i = 0; i <arrays.length ; i++) {
System.out.print(arrays[i]+" ");
}
System.out.println();
}
//反转数组
public static int[] reverse(int[] arrays){
int[] result=new int[arrays.length];
//反转操作
for (int i = 0,j=arrays.length-1; i < arrays.length ; i++,j--) {
result[j]=arrays[i];
}
// for(int x:result){
// System.out.print(x+" ");
// }
return result;
}
}
反转数字里注释掉的用的是增强循环
代码块里的第一行可以给去掉,我是写在包里面的第一行是自动生成的。
如下图:
二维数组
个人理解数组里面原本的值就是一个数组,图到代码,想一下既可以理解
定义一个二维数组
package com.zsw.array;
public class ArrayDemo05 {
public static void main(String[] args) {
//[4]行[2]列
int[][] array={{1,2},{2,3},{3,4},{4,5}};
System.out.println(array[0]);
printArray(array[0]);
}
//写个方法打印数组元素
public static void printArray(int[] arrays){
System.out.println("===调用printArray方法===");
for (int i = 0; i <arrays.length ; i++) {
System.out.print(arrays[i]+" ");
}
System.out.println();
}
}
三维数组也就是二维数组里面的每个值是一个数组。(点线面……)
打印数组和二维数组
package com.zsw.array;
public class ArrayDemo05 {
public static void main(String[] args) {
//[4]行[2]列
int[][] array={{1,2},{2,3},{3,4},{4,5},{5,6,7}};
System.out.println(array[0]);
printArray(array[0]);
System.out.println(array.length);
printArray(array);
}
//写个方法打印数组元素
public static void printArray(int[] arrays){
System.out.println("===调用printArray方法,打印一维数组===");
for (int i = 0; i <arrays.length ; i++) {
System.out.print(arrays[i]+" ");
}
System.out.println();
}
//写个方法打印二维数组元素
public static void printArray(int[][] arrays){
System.out.println("===调用printArray方法,打印二维数组===");
for (int i = 0; i <arrays.length ; i++) {
for (int j=0;j<arrays[i].length;j++){
System.out.print(arrays[i][j]+"\t");
}
System.out.println();
}
System.out.println();
}
}
Arrays类
package com.zsw.array;
import java.util.Arrays;
public class ArrayDemo06 {
public static void main(String[] args) {
int[] a={1,4444,23,999,8989,343,24,335};
System.out.println(a);//输出数组的hashcode [I@1b6d3586
System.out.println(Arrays.toString(a));//打印数组元素
Arrays.sort(a);//数组排序
System.out.println(Arrays.toString(a));
Arrays.fill(a,2,4,0);//用0填充下标为2~4数组
System.out.println(Arrays.toString(a));
}
}
JDK帮助文档: 链接:pan.baidu.com/s/1G7-mgPvk… 提取码:hu47
冒泡排序
package com.zsw.array;
import java.util.Arrays;
public class ArrayDemo07 {
public static void main(String[] args) {
int[] a={9,8,7,6,5,4,3,2,1};
sort(a);
}
//冒泡排序
//1.比较数组中,二个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
//2.每次比较,都会产生出一个最大,或者是最小的数字
//3.下一轮则可以少一次排序,依次循环知道结束!
public static void sort(int[] array){
int t=0;
for (int i = 1; i <array.length ; i++) {
for (int j = 1; j <array.length-i+1 ; j++) {
if (array[j]<array[j-1]){
t=array[j];
array[j]=array[j-1];
array[j-1]=t;
}
}
}
System.out.println(Arrays.toString(array));
}
}
python的冒泡排序写法会更简洁
a=[9,8,7,6,5,4,3,2,1] for i in range(1,len(a)): for j in range(1,len(a)-i+1): if (a[j]<a[j-1]): a[j],a[j-1]=a[j-1],a[j] print(a)
返回冒泡排序数组
package com.zsw.array;
import java.util.Arrays;
public class ArrayDemo07 {
public static void main(String[] args) {
int[] a={9,8,7,6,5,4,3,2,1};
int[]b=sort(a);
System.out.println(Arrays.toString(b));
}
//冒泡排序
//1.比较数组中,二个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
//2.每次比较,都会产生出一个最大,或者是最小的数字
//3.下一轮则可以少一次排序,依次循环知道结束!
public static int[] sort(int[] array){
int t=0;
for (int i = 1; i <array.length ; i++) {
for (int j = 1; j <array.length-i+1 ; j++) {
if (array[j]<array[j-1]){
t=array[j];
array[j]=array[j-1];
array[j-1]=t;
}
}
}
// System.out.println(Arrays.toString(array));
return array;
}
}
增加flag,优化冒泡排序
package com.zsw.array;
import java.util.Arrays;
public class ArrayDemo07 {
public static void main(String[] args) {
int[] a={9,8,7,6,5,4,3,2,1};
int[]b=sort(a);
System.out.println(Arrays.toString(b));
}
//冒泡排序
//1.比较数组中,二个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
//2.每次比较,都会产生出一个最大,或者是最小的数字
//3.下一轮则可以少一次排序,依次循环知道结束!
public static int[] sort(int[] array){
int t=0;
for (int i = 1; i <array.length ; i++) {
boolean flag=false;//通过flag标识减少没有意义的比较
for (int j = 1; j <array.length-i+1 ; j++) {
if (array[j]<array[j-1]){
t=array[j];
array[j]=array[j-1];
array[j-1]=t;
flag=true;//如果里面没有产生比较flag是flase
}
}
if (flag==false){break;}//顺序已经正常后面就不需要走了
}
// System.out.println(Arrays.toString(array));
return array;
}
}
稀疏数组
首行记录的是:总共6行7列,有效的数字,只有8个。
之后记录的每个有效数字的坐标和值。
稀疏数组实例
package com.zsw.array;
import java.util.Arrays;
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;
//输出原始数组
for(int[] x:array1){
System.out.println(Arrays.toString(x));
}
//转换为稀疏数组保存
//获取有效值的个数
int sum=0;
for (int i=0;i<11;i++){
for (int j = 0; j < 11; j++) {
// System.out.print(array1[i][j]+" ");
if(array1[i][j]!=0) sum++;
}
// System.out.println();
}
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.length; j++) {
if(array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
//后面的就是描述它的体,挺简单 ,没什么难的。
}
}
}
//输出稀疏数组
for(int i=0;i<array2.length;i++){
System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
}
}
}
还原稀疏数组
package com.zsw.array;
import java.util.Arrays;
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;
//输出原始数组
for(int[] x:array1){
System.out.println(Arrays.toString(x));
}
//转换为稀疏数组保存
//获取有效值的个数
int sum=0;
for (int i=0;i<11;i++){
for (int j = 0; j < 11; j++) {
// System.out.print(array1[i][j]+" ");
if(array1[i][j]!=0) sum++;
}
// System.out.println();
}
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.length; j++) {
if(array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
//后面的就是描述它的体,挺简单 ,没什么难的。
}
}
}
//输出稀疏数组
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("=======还原======");
//1.读取稀疏数组,给其中的元素还原它的值
int[][] array3=new int[array2[0][0]][array2[0][1]];
for (int i = 1; i <=array2[0][2] ; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
for(int[] x:array3){
System.out.println(Arrays.toString(x));
}
}
}