11、数组

1、数组

数组是用来存储固定大小的同类型元素的容器。

2、声明数组
  • dataType[] arrayRefVar;   //首选
     或
    dataType arrayRefVar[];  //效果相同,但不是首选
    
3、创建数组
  • 静态初始化

    • dataType[] arrayRefVar = new dataType[] {value0, value1, ..., valuek};   
      //  可以缩写成 dataType[] arrayRefVar =  {value0, value1, ..., valuek};   
      
  • 动态初始化

    • dataType[] arrayRefVar = new dataType[arraySize]; 
      
    • 一、使用 dataType[arraySize] 创建了一个数组。

    • 二、把新创建的数组的引用赋值给变量 arrayRefVar。

4、数组元素的获取
  • 直接打印数组名称会得到数组对应的内存地址哈希值

  • 访问数组时是以 数组名称[索引值] 的格式

  • 索引是基0的

  • public class DemoArray {
        public static void main(String[] args) {
            int[] array = {10, 20, 30};
            for (int i = 0; i < array.length; i++) {
                System.out.println(array[i]);
            }
        }
    }
    
  • 使用动态初始化时,元素会有默认值

    • 整数默认值为0
    • 浮点数默认值为0.0
    • 字符型默认值为‘\u0000’
    • 引用类型默认值为 null
5、Java內存
  • 1、棧(Stack) :存放方法的局部变量,方法的运行一定在栈当中
    • 局部变量:方法的参数,或者{…}内的变量
    • 作用域:一旦超出作用域,立即从栈消失
  • 2、堆(Heap) :凡是new出来的都在堆中
    • 堆中的数据都有对应的16进制地址值
    • 堆中的数据都有对应的默认值
      • 整数默认值为0
      • 浮点数默认值为0.0
      • 字符型默认值为‘\u0000’
      • 引用类型默认值为 null
  • 3、方法区(Method Area) :存储.class相关信息。包含方法的信息
  • 4、本地方法栈(Native Method Stack): 与操作系统相关
  • 5、寄存器(PC Register)
5、数组的内存图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4vQ7Xufa-1647753016141)(D:\User\15497\Desktop\2021-6-1-Java\IDEA-Project\JavaSE\JavaBasicGrammar\数组内存图.png)]

6、数组的遍历
  •     double[] myList = {1.9, 2.9, 3.4, 3.5};
        // 打印所有数组元素
        for (int i = 0; i < myList.length; i++) {
           System.out.println(myList[i] + " ");
        }
    
6.1、For-Each 循环
  •     public class TestArray {
             public static void main(String[] args) {
                  double[] myList = {1.9, 2.9, 3.4, 3.5};
                   // 打印所有数组元素
                  for (double element: myList) {
                      System.out.println(element);
                  }
              }
       }
    
7、获取数组的长度

arrayName.length

8、Arrays 类

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

  • 具有以下功能:
    • 给数组赋值:通过 fill 方法。
    • 对数组排序:通过 sort 方法,按升序。
    • 比较数组:通过 equals 方法比较数组中元素值是否相等。
    • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
  • 具体说明请查看下:
    • public static int binarySearch(Object[] a, Object key)
      用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
    • public static boolean equals(long[] a, long[] a2)
      如果两个指定的 long 型数组彼此相等,则返回
      true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
    • public static void fill(int[] a, int val)
      将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
    • public static void sort(Object[] a)
      对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
9、数组的练习
9.1、求数组的最值
  •     public class DemoArray {
            public static void main(String[] args) {
                int[] array = new int[]{10, 20, 30, 2, 5, 9, 8, 23};
                int max = array[0];
                int min = array[0];
                for (int i = 1; i < array.length; i++) {
                    //假如当前元素比max还大,就互换位置
                    if (array[i] > max) {
                        max = array[i];
                    }
                    //假如当前元素比min还小,就互换位置
                    if (array[i] < min) {
                        min = array[i];
                    }
                }
                System.out.println("数组最大值为:" + max);
                System.out.println("数组最小值为:" + min);
            }
        }
    
9.2、数组反转
  • 1、数组反转其实就是对称元素的交换

  • 2、通常遍历数组用的是一个索引:

    • int i = 0;
      
    • 此时 表示对称位置则需要再加一个索引

      int min =0; 
      int max = array.length-1;
      
  • 3、通过中间变量来交换两个变量的值

    • int a = 10; int b = 20; int temp = a; b = temp; //此时a b的值已经交换
      
  • 4、何时停止交换

    • 4.1、长度为基数时
      • min == max
    • 4.2、长度为偶数时
      • min>max
        总结:当min<max时即可交换
  •     public class DemoArray {
            public static void main(String[] args) {
                int[] array = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
                System.out.println("反转前");
                for (int i = 0; i < array.length; i++) {
                    System.out.println(array[i]);
                }
                for (int min = 0, max = array.length - 1;
                     min < max; min++, max--) {
                    int temp = array[min];
                    array[min] = array[max];
                    array[max] = temp;
                }
                System.out.println("反转后");
                for (int i = 0; i < array.length; i++) {
                    System.out.println(array[i]);
                }
            }
       }     
    
9.3、数组作为方法参数
  • 当调用方法时,向方法的小括号传参,传递的是数组的地址值。
  • 当数组作为方法返回值时,返回的也是数组的地址值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值