Javas数组

数组创建示例

public class Main{
    
    public static void main(String[] args){
        
       int[] a = new int[5];

       int[] b;
       b = new int[5];

       int c[] = new int[5];//C写法的保留
       
    }

}

数组创建语法:

·先声明、再分配空间

        数组类型[] 数组名;

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

·声明并分配空间

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

·声明并赋值(繁)

        数据类型[] 数组名 = new 数据类型[] {value1, value2, value3, ...};

·声明并赋值(简)

        数据类型[] 数组名 = {value1, value2, value3, ...};//显示初始化,注意:不可换行

注:数组名.length  可动态获取数组长度

( Java数组默认值 )

int - - 0            double - - 0.0            boolean - - false

char - - \u0000    (ASCII码的第一个位置,实际上表示一个空)

其他(其他值引用类型):null

数组扩容:

思路:

·创建大于原数组长度的新新数组

·将原数组中的元素依次复制到新数组中

·用新数组的地址替换原来数组的地址

public class Main{
    public static void main(String[] args){
        int[] nums = {1,2,3,4,5};
        int[] newNums = new int[nums.length * 2];
        for(int i=0; i<nums.length; i++){
            newNums[i] = nums[i];
        }
        nums = newNums;
        System.out.println(Arrays.toString(nums));
    }
}//Arrays.toString()在这里用于打印数组

复制的方式

· 循环将原数组中所有元素逐一赋值给新数组

· System.arraycopy(原数组, 原数组起始, 新数组, 新数组起始, 长度);

· java.util.Arrays.copyOf(原数组, 新长度);//返回带有原值的新数组

(示例)

        nums = Arrays.copyOf(nums, nums.length * 2); //扩容
        nums = Arrays.copyOf(nums, nums.length / 2); //裁剪

地址的替换

· 数组作为引用类型之一,其变量中存储的是数组的地址

· 完成元素复制后,需将新数组地址,赋值给原变量进行替换

数组在方法中的应用

1、数组类型的参数

public class Main{
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        add(nums);
        System.out.println(Arrays.toString(nums));
    }

    public static void add(int[] nums){
        for (int i = 0; i < nums.length; i++){
            nums[i] += 1;
        }
    }
}

//[2, 3, 4, 5, 6]

2、数组类型的返回值

public class Main{
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        nums = expend(nums);
        System.out.println(Arrays.toString(nums));
    }

    public static int[] expend(int[] nums){
        nums = Arrays.copyOf(nums, nums.length * 2);
        return nums;
    }
}

//[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

3、可变长参数

· 概念:可接收多个同类型实参,个数不限,使用方法与数组相同

· 语法:数据类型... 形参名 //必须定义在形参列表的最后,且只能有一个

public class TestArrayParameter{
    public static void main(String[] args) {
        printArray(1,2,3,4,5);
    }

    public static void printArray(int... oneArray){
        for(int i = 0 ;i<oneArray.length; i++){
            System.out.print(oneArray[i]+" ");
        }
    }
}

//1 2 3 4 5

( 数组的十种排序算法 )

冒泡排序        选择排序        插入排序

快速排序        堆排序            希尔排序        归并排序

桶排序            计数排序        基数排序

数组的查找(二分查找)

int index = Arrays.binarySearch(new int[]{1,2,3,4,5},5);

Java源码:

    public static int binarySearch(int[] a, int key){
        return binarySearch0(a, 0, a.length, key);
    }

    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                                           int key){
        int low = fromIndex;
        int high = toIndex - 1;
        while(low <= high){
            int mid = (low + high) >>> 1;
            int midVal = a[mid];

            if(midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid;  //key found
        }
        return -(low + 1);  //key not found
    }

二维数组

(简单代码示例)

public class Main{
    public static void main(String[] args) {
        int[][] array = new int[3][5];
        array[0][0] = 10;
        array[0][3] = 20;
        array[1][1] = 30;
        array[1][2] = 40;
        array[2][4] = 50;
    }
}

使用双下标访问二维数组中的元素,

第一个下标:行号 (高维下标)

第二个下标:列号(低维下标)

二维数组创建语法:

· 先声明、再分配空间

        数据类型[][] 数组名;

        数组名 = new 数据类型[高维长度][低维长度];

· 声明并分配空间

        数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];

· 声明并赋值(繁)

        数据类型[][] 数组名 = new 数据类型[高维长度][];//不规则数组,自行new低维数组

· 声明并赋值(简)

        数据类型[][] 数组名 = {{v1, v2, v3},{v4, v5},{v6, v7, v8, v9}};//显示初始化

(二维数组程序示例 - - 杨辉三角形 (无格式) )

public class Main{
    public static void main(String[] args) {
        //定义杨辉三角形的数组
        int[][] array = new int[10][0];
        for (int i = 0; i < array.length; i++) {
            array[i] = new int[i + 1];
            array[i][0] = 1;
            array[i][i] = 1;
            for (int j = 1; j < array[i].length - 1; j++) {
                array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
            }
        }

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值