数组二

一、Arrays类

这是java里面自带的关于数组的一些方法,我们可以直接调用

例如:

 //1.Arrays.toString()
 System.out.println(Arrays.toString(a))//打印输出数组元素
 
 //2.Arrays.sort()
 Arrays.sort(a);
 System.out.println(Arrays.toString(a))//先对数组元素进行排序(升序),再打印
     
 //3.Arrays.fill()
     //填充一部分元素
 Arrays.fill(a,2,4,0);//将a[2]到a[4]之间填充为0 Arrays.fiil(数组名,起始位,终止位,填充数值)
 System.out.println(Arrays.toString(a));//打印填充后的数组元素
     //填充所有元素
 Arrays.fill(a,0);//所有数组元素填充为0 Arrays.fill(数组名,填充数值)
 System.out.println(Arrays.toString(a));//打印填充后的数组元素

二、冒泡排序

 //冒泡排序
 //1.比较数组中两个相邻的元素,如果前一个比后一个大,则交换顺序
 //2.每一次比较都会产生一个较大和较小的数
 //3.下一轮则可以少一次排序
 //4.依次循环,直到结束
 package array;
 
 import java.util.Arrays;
 public class ArrayDemo8 {
     public static void main(String[] args) {
         int[] a = {1,6,4,9,5,12,8,35};
         sort(a);//调用sort冒泡方法对数组a进行排序
         System.out.println(Arrays.toString(a));//Arrays.toString()指令打印排好序的数组
    }
 
     public static int[] sort(int[] array){//冒泡排序方法
         //定义一个临时变量
         int temp = 0;
         //外层循环:判断需要循环多少次
         for (int i = 0; i < array.length-1; i++) {//比较array.length-1次就可以了
             boolean flag = false;//这里利用一个flag标识位减少了没有意义的比较
             //内层循环:比较,若前一个大就交换位置
             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;
                     flag = true;
                }
            }
             if (flag == false){
                 break;
            }
        }
          return array;
    }
 }

三、稀疏数组

稀疏数组:记录原始数组的大小,记录有效数字的位置和数值,压缩成一个小的数组

 package array;
 
 public class ArrayDemo9 {
 
     //******稀疏数组:记录原始数组的大小,记录有效数字的位置和数值,压缩成一个小的数组
 
     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;
         //2.输出原始的数组
         System.out.println("输出原始的数组:");
         for (int i = 0; i < array1.length; i++) {
             for (int j = 0; j < array1[i].length; j++) {
                 System.out.print(array1[i][j]+"\t");
            }
             System.out.println();
        }
 
         System.out.println("============================");
 
         //***************转换为稀疏数组保存*************
 
         //1.获取有效值的个数
         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;//这三行代码对稀疏数组的第一行进行了定义和赋值,表明了原始数组的行数、列数和有效值数
 
         //3.遍历二维数组,将非零的值存放到稀疏数组中
         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];
                }
            }
        }
         //4.输出稀疏数组
         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]);
        }
         System.out.println("===============================");
         //方法二,同输出array1的方法一样
         for (int i = 0; i < array2.length; i++) {
             for (int j = 0; j < array2[i].length; j++) {
                 System.out.print(array2[i][j]+"\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 i = 0; i < array3.length; i++) {
             for (int j = 0; j < array3[i].length; j++) {
                 System.out.print(array3[i][j]+"\t");
            }
             System.out.println();
        }
    }
 }

输出结果:

posted @ 2021-07-12 17:01  Hly459  阅读(172)  评论(0)    收藏  举报