zoukankan      html  css  js  c++  java
  • Java数组

    Java数组

    1. 数组概述

    • 相同类型的若干数据,按一定先后次序排列的有序集合
    • 每个数据被称作一个数组元素,可通过他的下标来访问

    2. 数组声明创建

    1. 声明与创建

      • 首先声明数组变量

        int[] aname;//首选方法
        int aname[];
        
      • Java使用new操作符来创建数组

        int[] aname = new int[size];
        
      • 数组元素通过索引访问,数组索引从0开始

      • 获取数组长度:arrays.length

    2. 内存分析

      Java:

        • 存放new对象和数组
        • 可以被线程共享,不会存放在别的对象引用
        • 存放基本数据类型
        • 引用对象的变量,存放引用在堆地址
      • 方法区
        • 可以被线程共享
        • 包含所有class和static变量
    3. 三种初始化

      • 静态初始化

        int[] a = {1,2,3};
        Man[] mans = {new Man(1,1),new Man(2,2)};
        
      • 动态初始化

        int[] a = new int[2];
        a[0] = 1;
        
      • 数组默认初始化

        数组是引用类型,相当于类的实例变量,按同样方式隐式初始化。

    4. 数组四个基本特点

      • 长度确定,大小不变
      • 元素必须是相同类型
      • 可任意类型
      • 数组变量是引用类型,数组对象存放在堆中
    5. 数组下标越界

      • 下标合法区间:[0,length-1],越界报错.

        ArrayIndexOutOfBoundsException:数组下标越界异常

      • 小结:

        • 数组是相同类型有序集合
        • 数组是对象
        • 数组长度不可变,超出报越界异常

    3. 数组使用

    • for each

    • 数组作方法入参

    • 数组作返回值入参

      public static void main(String[] args) {
              int[] arrays = {1,2,3,4,5};
              //1.for循环
      //        for (int i = 0; i <arrays.length ; i++) {
      //            System.out.println(arrays[i]);
      //        }
              //2.for each
      //        for (int array:arrays) {
      //            System.out.println(array);
      //        }
              //3.调用入参方法
      //        printArray(arrays);
              //4.数组作返回值
              int[] reverse = reverse(arrays);
              printArray(reverse);
              System.out.println("=====================");
              int[][] array = {{1,2},{3,4},{5,6},{7,8}};
              for (int i = 0; i < array.length ; i++) {
                  for (int j = 0; j < array[i].length ; j++) {
                      System.out.println(array[i][j]);
                  }
              }
          }
      
          //3.方法入参
          public static void printArray(int[] arrays){
              for (int array:arrays) {
                  System.out.println(array);
              }
          }
      
          //4.数组作返回值
          public static int[] reverse(int[] arrays){
              int[] result = new int[arrays.length];
              for (int i = 0; i < arrays.length ; i++) {
                  result[i] = arrays[arrays.length-i-1];
              }
              return result;
          }
      

    4. 多维数组

    • 多维数组定义:可看成是数组的数组,二维数组是特殊的一维数组,其中每个元素都是一维数组。

      int[][] a = new int[2][3];
      

    5. Arrays类

    1. 数组工具类Arrays:java.util.Arrays
    2. 数组对象本身没什么方法,可调用Arrays类中的
    3. 查看java API手册
    4. Arrays类中方法有static修饰,可直接调用
    5. 功能:
      • 给数组赋值:fill
      • 排序:sort,升序
      • 比较数组:equals,比较数组中元素是否相等
      • 查找数组元素:binarySearch,对已排序数组二分查找
    public static void main(String[] args) {
            int[] a = {1,2,3,87,2678,431,17,77899};
    
            //System.out.println(a); //[I@531be3c5
            //1.输出数组
            //System.out.println(Arrays.toString(a)); //依次输出数组元素
            //自写toString
            //printArrays(a);
    
            //2.升序排序
            //Arrays.sort(a);
            //System.out.println(Arrays.toString(a));
    
            //3.填充
            //Arrays.fill(a,0);
            Arrays.fill(a,2,4,0);
            System.out.println(Arrays.toString(a));
    
            //4.比较 ==与equals
            int[] b = a;
            System.out.println(a==b);
            System.out.println(Arrays.equals(a,b));
            Integer i1 = 128;
            Integer i2 = 128;
            System.out.println(i1==i2);
            System.out.println(i1.equals(i2));
    
            //5.二分查找
            System.out.println(Arrays.binarySearch(a,17));
            System.out.println(Arrays.binarySearch(a,77899));
        }
    
        public static void printArrays(int[] a){
            for (int i = 0; i < a.length ; i++) {
                if (i == 0){
                    System.out.print("[");
                }
                if (i == a.length-1){
                    System.out.print(a[i]+"]");
                }else{
                    System.out.print(a[i]+", ");
                }
            }
        }
    

    6. 稀疏数组

    1. 介绍:
      • 一个数组大部分元素为0,或同一值可用稀疏算法
      • 处理方式:
        • 记录数组中一共几行几列,有多少个不同值
        • 把巨头不通知的元素和行列及值记录在小规模数组中,从而缩小规模
    //稀疏数组
            //1.创建一个二维数组 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+"	");
                }
                System.out.println();
            }
            //2.稀疏数组
            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("======================================");
            System.out.println("有效值个数:"+sum);
            //打印稀疏数组
            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]+"	"+
                        array2[i][1]+"	"+
                        array2[i][2]+"	"
                );
            }
    
            //3.还原
            System.out.println("==========================");
            System.out.println("还原稀疏数组");
            int[][] array3 = new int[array2[0][0]][array2[0][1]];
            //还原其他元素
            for (int i = 1; i < array2.length ; i++) {
                array3[array2[i][0]][array2[i][1]] = array2[i][2];
            }
            for (int[] ints:array3) {
                for (int anInt:ints) {
                    System.out.print(anInt+"	");
                }
                System.out.println();
            }
    
  • 相关阅读:
    sass接触
    css 文字超出部分显示省略号(原)
    vue组件
    字节流
    File类、递归
    异常
    静态导入、可变参数、Collections集合工具类、集合嵌套
    Map接口
    Set接口
    List接口
  • 原文地址:https://www.cnblogs.com/bwxx/p/13161084.html
Copyright © 2011-2022 走看看