Fork me on GitHub

数组基础

用IDEA学习Java的第六天

数组

数组的定义

  • 数组是相同类型数据的有序集合
  • 数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成
  • 其中,每一个数据称作一个数据元素,每个数据元素可以通过一个下标来访问它们

数组的声明与创建

  • 声明数组

    int[] nums;//首选的方法
    
    int nums[];
    
  • 创建数组

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

  • 数组获取数组的长度:nums.length;

package com.zjl.array;
public class ArrayDemo01{
    public static void main(String[] args){
        int[] nums=new int[10];
        //给数组元素中赋值
        nums[0]=1;
        nums[1]=15;
        nums[2]=14;
        nums[3]=11;
        nums[4]=9;
        nums[5]=8;
        nums[6]=4;
        nums[7]=8;
        nums[8]=9;
        nums[9]=2;
        //求数组之和
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
        }
        System.out.println("sum="+sum);
    }
}

三种初始化

  • 静态初始化

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

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

    数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

package com.zjl.array;
public class ArrayDemo02{
    public static void main(String[] args){
        //静态初始化:创建+赋值
        int[] a={1,2,3,4,5,6,7,8,9};
        Man[] mans={new Man(),new Man()};
        //动态初始化:包含默认初始化
        int[] b=new int[10];
        b[0]=10;
        System.out.println(b[0]);
    }
}
package com.zjl.array;
public class Man{
    
}

QQ截图20201115111753

数组的四个基本特点

  • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素必须是相同类型,不允许出现混合类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中。

数组的下界

下标的合法区间:[0,length-1],如果越界就会报错;

数组越界例子:

public static void main(String[] args){
      int[] a=new a[2];
    System.out.println(a[2]);
}

报错:ArrayIndexOutOfBoundsException 数组下标越界异常!

小结

  • 数组是相同数据类型(数据类型可以为任意类型)的有序集合
  • 数组也是对象。数组元素相当于对象的成员变量
  • 数组长度是确定的,不可变的。如果越界,则报:ArrayIndexOutofBounds

数组使用

  • For-Each循环

    for(type element: array)
     //重新定义一个数组元素:数组,然后输出数组
    {
        System.out.println(element);
    }
    
package com.zjl.array;
public class ArrayDemo03{
    public static void main(String[] args){
        int[] nums={1,2,3,4,5};
        //遍历输出数组
        for(int i=0;i<nums.length;i++){
            System.out.print(nums[i]+"、");

        }
        System.out.println();
        System.out.println("***************");
        //数组各数相加
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum+=nums[i];
        }
        System.out.println("sum="+sum);
        System.out.println("***************");
        //求最大值

        int max=nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[0]<nums[i]){
                max=nums[i];
            }
        }
        System.out.print("最大值为:"+max);
    }

}
package com.zjl.array;
public class ArrayDemo04{
    public static void main(String[] args){
        int nums[]={1,2,3,4,5};
        for(int num:nums){
            System.out,println(num);
        }
    }
}
  • 数组作方法入参

    package com.zjl.array;
    public class ArrayDemo05{
        public static void main(String[] args){
            int[] nums={1,2,3,4,5};
            printArray(nums);
        }
        public static void printArray(int[] nums){
            for(int i=0;i<nums.length;i++){
                System.out.println(nums[i]+"、");
            }
        }
    }
    
  • 数组作为返回值(反转输出)

    package com.zjl.array;
    public class ArrayDemo06{
        //反转输出
        public static void main(String[] args){
            int[] nums={1,2,3,4,5};
            int[] reverse=reverse(nums);
            printArray(reverse);
        }
        public static int[] reverse(int[] nums){
            int[] result=new int[nums.length];
            int j=0;
            int i=0;
           for(i=0,j=nums.length-1;i<nums.length;i++,j--){
               result[j]=nums[i];
           }
            return result;
        }
        public static void printArray(int[] nums){
            for(int i=0;i<nums.length;i++){
                System.out.print(nums[i]+"、");
            }
        }
    }
    

多维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

  • 二维数组

    int a[][]=new int[][]
    

    以上二维数组a可以看成一个两行五列的数组。

    代码示例

    遍历二维数组

    package com.zjl.array;
    //遍历二维数组
    public class ArrayDemo07 {
        public static void main(String[] args) {
            int[][] num={{0,2},{1,4},{2,6},{3,8}};
           printArray(num);
        }
        public static void printArray(int nums[][]){
            int count=0;
            for (int i=0;i<nums.length;i++){
                for (int j=0;j<nums[i].length;j++){
                    System.out.print(nums[i][j]+" ");
                    count++;
                    if(count%2==0){
                        System.out.println();
                    }
                }
            }
        }
    }
    
    

    编译结果

    0 2
    1 4
    2 6
    3 8

Arrays类

  • 数组的工具类java.util.Arrays
  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用(注意:是“不用”而不是“不能”)
package com.zjl.array;

import java.util.Arrays;
//运用Arrays类对数组进行遍历输出
public class ArrayDemo08 {
    public static void main(String[] args) {
        int[] nums={12,45,6,9,751,45,12,78};
        System.out.println(Arrays.toString(nums));
        printArray(nums);
        printArrays(nums);
    }
    public static void printArray(int[] num){
        for (int i : num) {
            System.out.print(i+", ");
        }
        System.out.println();
    }
    public static void printArrays(int[] num){
        for (int i =0;i<num.length;i++) {
            if(i==0){
                System.out.print("[");
            }
            if(i==num.length-1){
                System.out.println(num[i]+"]");
            }else {
                System.out.print(num[i] + ", ");
            }

        }
    }
}

运行结果:

[12, 45, 6, 9, 751, 45, 12, 78]
12, 45, 6, 9, 751, 45, 12, 78,
[12, 45, 6, 9, 751, 45, 12, 78]

  • Arrays类的常用功能

    1. 给数组赋值:通过fill方法

      public static void fill(int[] a,
                              int fromIndex,
                              int toIndex,
                              int val)
      

      将指定的int值为指定数组的每个元素对象的指定范围。范围是从指数 fromIndex填充,包容延伸,指数 toIndex,独家。(如果 fromIndex==toIndex,范围是满是空的。)

      参数

      a -数组填充

      fromIndex -第一个元素的索引(含)充满指定值

      toIndex -最后一个元素的索引(独家)充满指定值

      val -被存储在数组的所有元素的值

    2. 对数组排序:通过sort方法,按升序

    3. 比较数组:通过equals方法比较数组中元素是否相等。

    4. 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

posted @ 2020-11-16 14:17  乐二啊  阅读(79)  评论(0)    收藏  举报