首页 > 其他分享 >数组

数组

时间:2022-08-23 20:33:52浏览次数:60  
标签:arr int System 数组 println out

数组

存储一堆数据得集合,这一堆数据的数据类型是一致的

语法:

数据类型 [] 数组名称 = new 数据类型[长度]; 显式数组

数据类型 [] 数组名称 = {值1,值2,值3......}; 隐式数组

隐式数组的长度根据初始化定义时的值的数量来决定

        //数组名:arr  数据类型:int  数组长度:5
//显式数组
       int [] arr = new int[5];
//隐式数组
int [] arr ={1,2,3,4,5};

 

规则:

  1. 数组的数据类型: 数据类型 [] 数据类型可以是基本数据类型(byte short int long float double char boolean), 引用数据类型, String类型

  2. 长度: 数组能储存多少个相同类型的数据,长度一旦确定,则无法变更,否则报错

  3. 在数组中,位置按照下标的定义来进行存储

  4. 如果数组的下标值超过了数组初始定义的长度,则出现错误,异常: ArrayIndexOutOfBoundsException 数组下标越界

注:

数组的下标是从0开始的,也就是说第一个数据的下标是0,之后的数据的下标都是数组中实际位置减1;

 

获取元素值:

数组的数据类型 数组元素值 = 数组名称[下标值];

语法:

获取数组长度: int i = 数组名称.length;

        //获取数组arr的长度
int i = arr.length;
       System.out.println("数组的长度为:"+i);

 

使用循环遍历数组

 for(int i = 0; i < arr.length;i ++){
           System.out.println(arr[i]);
      }

数组工具类:

快速打印: String str = new Arrays.toString(数组名称);

快速排序(升序): Arrays.sort(数组名称);

数组填充:Arrays.fill(数组名称,覆盖的值);

        //数组名:arr  数据类型:int  数组长度:5
       int [] arr ={1,2,3,4,5};

       Arrays.sort(arr);
//升序排列
       for (int i = 0; i <arr.length; i++) {
           System.out.println(arr[i]);
      }
//降序排列
       for (int i =arr.length-1; i >=0; i--) {
           System.out.println(arr[i]);
      }
//快速打印
System.out.println(Arrays.toString(arr));
//把数组内的所有内容替换成0
Arrays.fill(arr,0);
       System.out.println(Arrays.toString(arr));
//把数组内的2-4替换为0 2是起始位置,4是终止位置的下标,0是覆盖的值
Arrays.fill(arr,2,4,0);
       System.out.println(Arrays.toString(arr));

 

二维数组

二维数组是特殊的一维数组,其每一个元素都是一个一维数组

语法:

数据类型 [] [] 数组名 = [长度] [长度];

第一个长度决定了总数组的长度,及包括了多少小数组

第二个长度决定了小数组的长度,及包括了多少的数据

 

二维数组

 

/*
* 第一行存了1,2
* 第二行存了2,3
* 第三行存了3,3
* 第四行存了4,4
* 第五行存了5,5
* */
int [][] arr = {{1,2},{2,3},{6,3},{4,4},{5,5}};
//第一个数组的值1的下标是(0,0)/值2的下标为(0,1)
//第二个数组的值2的下标的(1,0)/值3的下标为(1,1)

 

冒泡排序

冒泡排序是最为出名的一种排序算法

比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置

每一次比较,都会产生出一个最大,或者最小的数字

下一轮则可以少一次排序!

依次循环,直到结束!

    public static void main(String[] args) {
       //冒泡排序
       int [] a = {1,34,656,788,21,75,34,23};

       int[] sort = sort(a);//调用完我们排序方法后,返回一个排好序的数组

       System.out.println(Arrays.toString(sort));


  }
   public static int[] sort(int [] arr){
       //临时变量
       int temp = 0;
       //外层循环,判断我们要走多少次
       for (int i = 0; i < arr.length; i++) {

           boolean flag = false; //通过flag标识符减少没有意义的比较

           //内层循环 比较判断两个数,如果第一个数比第二个数大,则交换位置
           for (int j = 0; j < arr.length -1-i; j++) {
               //当前为降序排序,如果要更改为升序,只需要把下面的'>'更改为'<'
               if ( arr[j+1] > arr[j]) {
                   temp = arr[j];
                   arr[j] = arr[j + 1];
                   arr[j + 1] = temp;
                   flag = true;
              }
          }

           if (flag == false){
               break;
          }
      }
       return arr;
  }

 

稀疏数组

稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组

        
public static void main(String[] args) {
       //1. 创建一个二维数组 11*11     0:没有棋子 1:黑棋   2:白棋
       int [][] arr= new int [11][11];
       arr[1][2] = 1;
       arr[2][3] = 2;
       arr[3][4] = 3;
       //输出原始的数组
       System.out.println("输出原始的数组");
       for ( int [] ints: arr ) {
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
          }
           System.out.println( );
      }

       //转换为稀疏数组保存
       //获取有效值个数
       int sum = 0;
       for (int i = 0; i < 11; i++) {
           for (int j = 0; j < 11; j++) {
               if (arr[i][j] != 0){
                   sum++;
              }
          }
      }
       System.out.println("有效值个数为:"+sum);

       //2. 创建一个稀疏数组
       int [][] array = new int [sum+1][3];

       array[0][0] = 11;
       array[0][1] = 11;
       array[0][2] = sum;

       //遍历二维数组, 将非零的值, 存放稀疏数组中
       int count = 0;
       for (int i = 0; i < arr.length; i++) {
           for (int j = 0; j < arr[i].length; j++) {
               if (arr[i][j] != 0){
                   count++;
                   array[count][0] = i;
                   array[count][1] = j;
                   array[count][2] = arr[i][j];
              }
          }
      }

       //输出稀疏数组
       System.out.println("稀疏数组");

       for (int i = 0; i < array.length; i++) {
           System.out.println(array[i][0]+"\t"
                             +array[i][1]+"\t"
                             +array[i][2]+"\t");
      }

       System.out.println("==================================");
       System.out.println("还原");
       //1. 读取稀疏数组的值
       int [][] arrayx = new int[array[0][0]][array[0][1]];

       //2. 给其中的元素还原它的值
       for (int i = 1; i < array.length; i++) {
           arrayx[array[i][0]][array[i][1]] = array[i][2];
      }

       //3/ 打印
       System.out.println("输出还原的数组");

       for ( int [] ints: arr ) {
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
          }
           System.out.println( );
      }
  }

稀疏数组

标签:arr,int,System,数组,println,out
From: https://www.cnblogs.com/y6909/p/16612251.html

相关文章

  • 数字和字符串 与 数组 使用实例方法时的差别
    在数字和字符串中的实例方法不会改变其本身的值;而数组对象可能会改变原数组的值;从此延申出一个问题?......
  • 【Java基础】数组中的异常:下标越界和空指针异常
    编译时都不会报错。1.数组下标越界java.lang.ArrayIndexOutOfBoundsException//下标越界int[]arr=newint[]{1,2,3,4,5};for(inti=0;......
  • 【Java基础】操作数组的工具类Arrays
    1.常用方法方法描述booleanequals(int[]a,int[]b)判断两个数组是否相等,顺序不一样也返回falseStringtoString(int[]a)输出数组信息voidfill(int[]......
  • 【Java基础】数组中的常见算法:二分查找算法
    1.实现二分查找算法要求数组必须是有序的。把中间的值和要查询的值进行比较,相等则返回索引下标arr[middle]>number,则让尾索引等于middle-1,arr[middle]<number,则让开始......
  • js判断数组中是否有重复的数据
     一、普通数据constarr=['111','222','333','444','555'];//判断数组元素是否有重复getisRepeat:function(arr){varhash={};......
  • filter 加 indexOf 方法去重数组
    letarr=[1,2,3,4,3,2,3,4,6,7,6]letunique=(arr)=>{console.log(arr)returnarr.filter((item,index)=>{//......
  • Java数组(狂神说Java)
    一、数组声明创建与使用首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的方法:dataType[]arrayRefVar;//首选的方法dataTypearrayRefVar[];//效......
  • 数组
    publicstaticvoidmain(String[]args){inta[]={1,2,3,4,5};//遍历数组for(inti=0;i<a.length;i++){System.out.println(a[i]);}......
  • 【Perl小抄】列表和数组
    标量Perl中没有整数类型,只有浮点数类型,整数类型也视为浮点数类型字符串:转义字符含义\\反斜线\"双引号字符串操作符号可以使用.进行连接小写字母x,......
  • C++ 数组作为函数的参数
    1.一个指针在32位操作系统上占4个字节,一个指针在64位操作系统上占8个字节,但是,编译器为了兼容32位操作系统和64位操作系统,所以指针都是4个字节长度。下面程序中的形参本质......