JAVA数组(2) 笔记

1.青蛙跳台阶问题
2.数组转字符串
3.数组拷贝
native方法
(1)native 此方法为本地方法
(2) src:源数组
srcPos:源数组的pos开始拷贝
dest:拷贝到的目的数组
destPost:拷贝到的目的数组的Pos位置
length:拷贝多长

Arrays.copyOf
array.clone()
Arrays.copyOfRange 拷贝范围

4.深拷贝,浅拷贝(针对对象)
可以认为,拷贝时产生副本
深拷贝:只是针对简单(基础)类型,当修改考背后的数组当中的下标的元素师,不影响原来数组的元素值
浅拷贝:拷贝时,数据类型为引用类型,数组中数据为地址,副本也为地址,则改变副本,即改变了原来的地址

(查看源码,ctrl+左键单击)

package NewJavaClass.Test2007;


import java.util.Scanner;
import java.util.Arrays;
/**
 * @ Author     :CYD
 * @ Date       :Created in 9:16 2020/7/23
 * @ Description:
 * @ Modified By:
 * @Version: $
 */

/*
* 1.青蛙跳台阶问题
* 2.数组转字符串
* 3.数组拷贝
*    native方法
* (1)native 此方法为本地方法
 *(2) src:源数组
 *    srcPos:源数组的pos开始拷贝
 *    dest:拷贝到的目的数组
 *    destPost:拷贝到的目的数组的Pos位置
 *    length:拷贝多长
 *
*    Arrays.copyOf
*    array.clone()
*    Arrays.copyOfRange 拷贝范围
*
* 4.深拷贝,浅拷贝(针对对象)
* 可以认为,拷贝时产生副本
* 深拷贝:只是针对简单(基础)类型,当修改考背后的数组当中的下标的元素师,不影响原来数组的元素值
* 浅拷贝:拷贝时,数据类型为引用类型,数组中数据为地址,副本也为地址,则改变副本,即改变了原来的地址
*
*(查看源码,ctrl+左键单击)
*
*
*
* */
public class Test0723 {
    //1.青蛙跳台阶问题

    public static int jumpFlor(int n) {
        if (n <= 0) {
            return -1;
        }
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        return jumpFlor(n - 1) + jumpFlor(n - 2);

    }

    public static void main1(String[] args) {
        System.out.println(jumpFlor(3));
    }

//=======================================================================================

    //1.数组转字符串
    //(1.)
    public static void main2(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        System.out.println(Arrays.toString(array));
        //[1,2,3,4,5]
    }

    //(2.)
    public static String myString(int[] array) {
        //参数判断必不可少
        if (array == null) {
            return null;
        }
        if (array.length == 0) {
            return "[]";
        }
        String begin = "[";
        for (int i = 0; i < array.length; i++) {
            if (i != array.length - 1) {
                begin = begin + array[i] + ", ";
            } else {
                begin = begin + array[i] + "]";
            }
        }
        return begin;
    }

    public static void main3(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        System.out.println(myString(array));
    }


    //2.数组拷贝
    //(1)(引用)
    public static int[] copyString(int[] array) {
        int[] array2 = new int[array.length];//在堆上开辟新的空间,大小和array一样
        for (int i = 0; i < array.length; i++) {//通过for循环复制array在堆上的值
            array2[i] = array[i];
        }
        return array2;
    }

    public static void main4(String[] args) {
        int[] array = {1, 2, 3};
        int[] ret = new int[array.length];
        System.out.println(Arrays.toString(copyString(array)));
    }

    //(2)
    public static void main5(String[] args) {
        int[] array = {1, 2, 3, 4, 5};

        int[] ret = Arrays.copyOf(array, array.length);//(拷贝的数组,拷贝的数组长度)
        System.out.println(Arrays.toString(ret));

    }


    //(3)最快,native方法
    public static void main6(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        int[] ret = new int[array.length];
        System.arraycopy(array, 0, ret, 0, array.length);
        System.out.println(Arrays.toString(ret));
        /**
         * 源码:
         *  public static native void arraycopy(Object src,  int  srcPos,
         *                                         Object dest, int destPos,
         *                                         int length);
         * 1.native 此方法为本地方法
         * 2. src:源数组
         *    srcPos:源数组的pos开始拷贝
         *    dest:拷贝到的目的数组
         *    destPost:拷贝到的目的数组的Pos位置
         *    length:拷贝多长
         * */
    }


        //(4)
        public static void main(String[] args) {
            int[] array = {1, 2, 3, 4, 5};
            int[] ret=array.clone();//产生需要克隆的对象的副本  数组名.clone()
            System.out.println(Arrays.toString(ret));


            //拷贝范围
            int []ret1=Arrays.copyOfRange(array,2,4);
            System.out.println(Arrays.toString(ret1));
            //[3,4]  默认左闭右开

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值