栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

爛爛

文章目录
  • 一.数组拷贝四大方法
    • 方法一:for循环逐个拷贝
    • 方法二:copy0f函数
    • 方法三:System下的arraycopy方法
    • 方法四:clone()方法
  • 二.深拷贝浅拷贝
  • 三.Arrays中常用方法
    • 1.二分查找Arrays.binarySearch方法
    • 2.Arrays.equals()方法判断数组或字符串是否相等
    • 3.逆天排序方法Arrays.sort()
    • 4.数组填充方法Arrays.fill()
  • 四.避坑小tip


一.数组拷贝四大方法 方法一:for循环逐个拷贝

1.代码展示:

 public static int [] copy(int [] arr)
    {
        int [] array=new int [arr.length];
        for (int i = 0; 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 
            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,5,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
            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中打印出来的地址

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号