【javase基础】第七篇:数组拷贝及Arrays常用方法

👀作者简介:大家好,我是大杉。
🚩🚩 个人主页:爱编程的大杉
支持我:点赞+关注~不迷路🧡🧡🧡
✔系列专栏:javase基础⚡⚡⚡
(❁´◡`❁)励志格言:在我有生之日,生命中所有的灿烂,终将用寂寞偿还。(加西亚·马尔克斯 《百年孤独》)

🤞🤞

在这里插入图片描述


一.🙌💖数组拷贝四大方法

方法一:for循环逐个拷贝

1.代码展示:

 public static int [] copy(int [] arr)
    {
        int [] array=new int [arr.length];
        for (int i = 0; i <arr.length ; i++) {
            array[i]=arr[i];
            //逐一拷贝
        }
        return array;
    }
    public static void main12(String[] args) {
        int [] arr={1,2,3,4,5,66};
        int [] ret=new int[arr.length];//创建一个同样大小的数组接收
        ret=copy(arr);
        for (int i = 0; i <ret.length ; i++) {
            System.out.println(ret[i]);
        }
    }

原理剖析
在这里插入图片描述改变拷贝数组中的元素,并不会影响原数组。因为他们指向不同的堆内存

方法二:copy0f函数

代码展示

 public static void main13(String[] args) {
        int [] arr={1,2,3,4,5,66};
       int [] ret= Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(ret));
        //Arrays.toString是以字符串的形式输出数组
    }

copy0f()源码分析
在这里插入图片描述

方法三:System下的arraycopy方法

代码展示

public static void main14(String[] args) {
        int [] arr={1,2,3,4,5,66};
        int [] ret=new int[arr.length];
        //想要拷贝到的数组;
       System.arraycopy(arr,0,ret,0,arr.length);
       //注意书写顺序
    }

源码剖析
在这里插入图片描述

方法四:clone()方法

代码展示

 public static void main15(String[] args) {
        int [] arr={1,2,3,4,5,66};
        int [] ret=arr.clone();
        //目标数组.clone()
        System.out.println(Arrays.toString(ret));
    }

二.深拷贝浅拷贝

从大的方面来说,不管是深拷贝还是浅拷贝,都可以统称为浅拷贝。如果更加深入的探析,深拷贝与浅拷贝是有一定区别的
深拷贝
在这里插入图片描述

浅拷贝在这里插入图片描述如何将浅拷贝变成深拷贝?
答:将对象也拷贝一份

三.Arrays中常用方法

1.二分查找Arrays.binarySearch方法

1.二分查找的一般方法

 public static int binarysearch(int [] arr, int k) {
        int left = 0;
        int right = arr.length - 1;
        while(left<right) {
            int mid = (left + right) >>>1;
            //>>>无符号右移相当于除法
            if (arr[mid] < k) {
                left = mid + 1;
            } else if (arr[mid] > k) {
                right = mid - 1;
            } else {
                return mid;
            }
        }

        return -1;
        //-1表示找不到
    }
    public static void main8(String[] args) {
        Scanner sc=new Scanner(System.in);
        int key=sc.nextInt();
        int [] arr={1,2,3,4,5,8};
        if(binarysearch(arr,key)==-1) {
            System.out.println("查无此数");
        }
        else
        {
            System.out.println(binarysearch(arr, key));
        }
    }

2.用Arrays.binarySearch

//快捷版二分查找;(规定查找范围)
    public static void main17(String[] args) {
        int [] arr={1,2,3,4,5,66};
        //规定范围的二分查找
        //fromIdex不写的时候默认从“0”开始;
        System.out.println(Arrays.binarySearch(arr,0,5 ,5));
        //System.out.println(Arrays.binarySearch(arr, 5));
    }
//不规定查找范围,默认全查找
public static void main(String[] args) {
        int [] arr={1,4,5,6,7,7,8,};
        System.out.println(Arrays.binarySearch(arr, 6));
    }

2.Arrays.equals()方法判断数组或字符串是否相等

1.比较数组:

public static void main(String[] args) {
        int [] arr={1,4,5,6,7,7,8,};
        int [] arr1={1,343,4667,7,8,9};
        System.out.println(Arrays.equals(arr, arr1));
        //返回值为布尔类型
    }

在这里插入图片描述2.比较字符串

 public static void main(String[] args) {
        String key="faff";
        String d="jackdaw";
        System.out.println(key.equals(d));
    }

在这里插入图片描述

3.逆天排序方法Arrays.sort()

1.实例

 public static void main(String[] args) {
        int [] arr={1,5,4,3,2,6,89,100};
        Arrays.sort(arr);
        int [] ret=arr;
        System.out.println(Arrays.toString(ret));
    }

在这里插入图片描述2.错误用法
在这里插入图片描述

sort()的方法的类型为void却用int []来接收,就会造成错误
在这里插入图片描述

4.数组填充方法Arrays.fill()

1.全部填充/部分填充

在这里插入图片描述

四.避坑小tip

1.实例(java与对比)

c语言:int *p=NULL;(表示p指向“0”地址)
java:int [] arr=NULL;(表示p不指向任何堆内存地址)

2.java中打印出来的地址

在这里插入图片描述

🔥此处打印出来的地址,是堆上的地址通过哈希表转化而来。并不是真正的堆的地址。但可以认为是堆的地址,因为它也具有唯一性

在这里插入图片描述

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Starry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值