国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Java中的Arrays,這一篇就夠了

開發(fā) 前端
當數(shù)組為多維數(shù)組,或一維數(shù)組中的元素為引用類型時,屬于淺復制,原數(shù)組與新數(shù)組的元素引用指向同一個對象。這里說的影響,是兩個數(shù)組復制后對應的元素。String的特殊是因為它的不可變性。

哈嘍,大家好,我是了不起。

JDK中提供了一個專門用于操作數(shù)組的工具類,即Arrays類,位于java.util 包中。

常用方法

返回類型

方法

說明

String

toString(array)

將數(shù)組array轉換成字符串

void

sort(array)

對數(shù)組進行升序排列。注意:排序算法是由Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch提供的雙軸快速排序。

void

fill(arr,val)

將數(shù)組arr全部元素賦值為val

boolean

equals(arr1,arr2)

判斷兩個數(shù)組是否相等

與arr類型相同

copyOf(arr,length)

將數(shù)組arr復制成一個長度為length的新數(shù)組

int

binarySearch(arr, val)

查詢元素val在arr中的下標值

示例代碼

public class Test {
    public static void main(String[] args) {
        int a[]={12,20,13,42,72,26,35,10,46,26,53};
        int b[]={3,5,7,8,54,23,9};
        int c[]={3,5,7,8,54,23,9};
 
        String str=Arrays.toString(a);       //將特定數(shù)組轉換成字符串
        System.out.println("字符串:"+str);
        
        Arrays.sort(a);                      //對數(shù)組array的元素進行升序排列
        System.out.println("排序后:"+Arrays.toString(a)); 
        
        Arrays.fill(a,10);                   //所以元素都賦值成特定值
        System.out.println("賦值后:"+Arrays.toString(a)); 
        
        boolean boo=Arrays.equals(a,b);      //判斷兩個數(shù)組是否相等(對應位置上的元素是否相等)
        boolean boo2=Arrays.equals(b, c);
        System.out.println("a:"+a);
        System.out.println("b:"+b);
        System.out.println("c:"+c);
        System.out.println("ab相等?"+boo);
        System.out.println("bc相等?"+boo2);
        
 
        int d[]=Arrays.copyOf(b,b.length);   //把數(shù)組復制成特定長度的數(shù)組,與直接賦值(引用傳遞)不同
        System.out.println("d:"+Arrays.toString(d));
        System.out.println("d:"+d);
        System.out.println("b:"+b);
        
        int i=Arrays.binarySearch(b, 5);     //查詢特定因素在數(shù)組中的下標
        System.out.println("下標是:"+i);
    }
}

運行結果:

字符串:[12,20,13,42,72,26,35,10,46,26,53]排序后:[10,12,13,20,26,26,35,42,46,53,72]賦值后:「10,10,10,10,10,10,10,10,10,10,10]
a:[I@1606bf5b:[I@14fcc96
c:[I@bcbc
ab相等?false
bc相等?true
d:[3,5,7,8,54,23,9]d:[I@671416b:[I@14fcc96
下標是:1

源碼解析

將數(shù)組array轉換成字符串

public static String toString(int[] a)

int[] arr = { 24, 69, 80, 57, 13 };
System.out.println("排序前:" + Arrays.toString(arr));
 
public static String toString(int[] a) {
 //a -- arr -- { 24, 69, 80, 57, 13 }
 
    if (a == null)
        return "null"; //說明數(shù)組對象不存在
    int iMax = a.length - 1; //iMax=4;
    if (iMax == -1)
        return "[]"; //說明數(shù)組存在,但是沒有元素。
 
    StringBuilder b = new StringBuilder();
    b.append('['); //"["
    for (int i = 0; ; i++) {
        b.append(a[i]); //"[24, 69, 80, 57, 13"
        if (i == iMax)
         //"[24, 69, 80, 57, 13]"
            return b.append(']').toString();
        b.append(", "); //"[24, 69, 80, 57, "
    }
}

二分查找

public static int binarySearch(int[] a,int key)

int[] arr = {13, 24, 57, 69, 80};
System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));

public static int binarySearch(int[] a, int key) {
    //a -- arr -- {13, 24, 57, 69, 80}
    //key -- 577
    return binarySearch0(a, 0, a.length, key);
}

private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                 int key) {
    //a -- arr --  {13, 24, 57, 69, 80}
    //fromIndex -- 0
    //toIndex -- 5
    //key -- 577                           
                                 
                                 
    int low = fromIndex; //low=0
    int high = toIndex - 1; //high=4

    while (low <= high) {
        int mid = (low + high) >>> 1; //mid=2,mid=3,mid=4
        int midVal = a[mid]; //midVal=57,midVal=69,midVal=80

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

復制

public static int[] copyOf(int[] original, int newLength)

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
    @SuppressWarnings("unchecked")
    T[] copy = ((Object)newType == (Object)Object[].class)
        ? (T[]) new Object[newLength]
        : (T[]) Array.newInstance(newType.getComponentType(), newLength);
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}

可以看到,最終調用的是System.arraycopy()方法,由虛擬機實現(xiàn),效率自然比用java一個個復制高。

深復制與淺復制

  • 當數(shù)組為一維數(shù)組,且元素為基本類型或String類型時,屬于深復制,即原數(shù)組與新數(shù)組的元素不會相互影響。
  • 當數(shù)組為多維數(shù)組,或一維數(shù)組中的元素為引用類型時,屬于淺復制,原數(shù)組與新數(shù)組的元素引用指向同一個對象。這里說的影響,是兩個數(shù)組復制后對應的元素。String的特殊是因為它的不可變性。

一維數(shù)組,元素為基本類型

public class SystemArrayCopy {

 public static void main(String[] args) {
     String str1 = "aa";
     String str2 = "bb";
     String str3 = "cc";
     String str4 = "dd"; 
     String[] src = {str1, str2, str3, str4};
     String[] dest = new String[4];

     System.arraycopy(src, 0, dest, 0, 4);

     System.out.println("改變前");
     print("src = ", src);
     print("dest = ", dest);

     src[0] = "abcd";

     System.out.println("改變后");
     print("src = ", src);
     print("dest = ", dest);
   }

    private static void print(String string, String[] arr) {
        System.out.print(string);
        for (String str : arr) {
            System.out.print(str + " ");
        }
        System.out.println();
    }

}
/*
改變前
src = aa bb cc dd 
dest = aa bb cc dd 
改變后
src = abcd bb cc dd 
dest = aa bb cc dd 
*/

可以看到,源數(shù)組第0個元素改變,并不會影響到目標數(shù)組。

多維數(shù)組

public class SystemArrayCopy {

 public static void main(String[] args) {
     int[] arr1 = {1, 2};
     int[] arr2 = {3, 4};
     int[] arr3 = {5, 6};
     int[] arr4 = {7, 8};
     int[][] src = new int[][]{arr1, arr2, arr3, arr4};
     int[][] dest = new int[4][];

     System.arraycopy(src, 0, dest, 0, 4);

     System.out.println("改變前");
     print("src = ", src);
     print("dest = ", dest);

     src[0][0] = 11111;

     System.out.println("改變后");
     print("src = ", src);
     print("dest = ", dest);
      }

 // 簡單輸出二維int數(shù)組的方法
 private static void print(String string, int[][] arr) {
     System.out.print(string);
     for (int[] a : arr) {
         for (int i : a) {
             System.out.print(i + " ");
         }
         System.out.print(",");
     }
     System.out.println();
 }
}
/*
改變前
src = 1 2 ,3 4 ,5 6 ,7 8 ,
dest = 1 2 ,3 4 ,5 6 ,7 8 ,
改變后
src = 11111 2 ,3 4 ,5 6 ,7 8 ,
dest = 11111 2 ,3 4 ,5 6 ,7 8 ,
*/

源數(shù)組改變后,目標數(shù)組也跟改變了,這就是淺復制

數(shù)組拷貝的4種方法

1. for循環(huán)

使用for循環(huán)自己實現(xiàn)數(shù)組的復制

2. clone

克隆方法我們在數(shù)組中是找不到的,它是object的方法,我們先看看源碼

protected native Object clone() throws CloneNotSupportedException;

看到了修飾符native,說明是由c或者c++實現(xiàn)的,它的優(yōu)點是速度快,它返回了object對象,所以使用的時候需要用對象接收返回值。

3. System.arraycopy()

通過上述源碼我們看到也是native修飾的,所以底層也是用c或者c++實現(xiàn)的,但是可以看到?jīng)]有返回值,clone()還需要對返回值進行類型轉換,所以它的速度是要比clone()要快的,這也是牛客網(wǎng)的一道題,問的就是四種拷貝哪種是最快的,答案肯定是System.arraycopy()。

4. Arrays.copyof()

在方法內部調用了System.arraycopy(),相當于換了名字。

結語

本次我們介紹了Java中的Arrays的常用方法,Arrays如何去操作數(shù)組、拷貝數(shù)組和打印數(shù)組的方法。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2024-04-08 10:01:33

2023-04-24 08:00:00

ES集群容器

2020-08-03 10:00:11

前端登錄服務器

2020-07-03 08:21:57

Java集合框架

2022-04-07 10:39:21

反射Java安全

2023-02-10 09:04:27

2020-05-14 16:35:21

Kubernetes網(wǎng)絡策略DNS

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-06-20 09:01:23

Git插件項目

2019-08-13 15:36:57

限流算法令牌桶

2022-08-01 11:33:09

用戶分析標簽策略

2021-04-08 07:37:39

隊列數(shù)據(jù)結構算法

2023-09-11 08:13:03

分布式跟蹤工具

2023-09-28 08:59:38

2020-07-06 08:06:00

Java模塊系統(tǒng)

2019-05-14 09:31:16

架構整潔軟件編程范式

2021-05-14 23:31:50

大數(shù)據(jù)計算機開發(fā)

2023-10-17 08:15:28

API前后端分離

2024-09-23 08:00:00

消息隊列MQ分布式系統(tǒng)

2020-11-06 10:01:06

Nginx
點贊
收藏

51CTO技術棧公眾號

麻豆精品国产传媒mv男同| 136国产福利精品导航| 久久久久久久色| 在线国产网址| 国内精品久久久久影院薰衣草| 国产日产欧美a一级在线| 国产成人精品123区免费视频| 日本韩国视频一区二区| 色成人亚洲网| 成人av片在线观看| 亚洲国产欧美不卡在线观看| 精品产国自在拍| 久久91亚洲精品中文字幕| 1区2区在线观看| 色偷偷88欧美精品久久久| 国产免费人做人爱午夜视频| 麻豆精品新av中文字幕| 成人一区二区三区四区| 亚洲精品进入| 欧美日本亚洲视频| 日韩一区二区三区免费| 精品国偷自产国产一区| av福利在线播放| 色综合天天综合网天天看片| 黄色三级电影网| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲欧洲一区二区在线观看| 亚洲精品三级| 成人亚洲欧美一区二区三区| 日韩成人av在线资源| 中文字幕欧美日韩在线| 爱搞国产精品| 精品久久久久av影院 | 亚洲一区中文字幕| 精品精品国产毛片在线看| 色视频www在线播放国产成人| 草草视频在线观看| 亚洲福利视频网站| 丁香花在线观看完整版电影| 欧美伦理视频网站| 黄色成年人视频在线观看| 欧美色图12p| 国产女人在线观看| 欧美综合天天夜夜久久| 中文有码在线观看| 福利微拍一区二区| 女人偷人在线视频| 欧美日韩精品欧美日韩精品一| 黄色毛片在线观看| 欧美日韩国产小视频| 免费在线看a| 日韩一区二区三免费高清| 牛牛精品在线视频| 亚洲色图偷窥自拍| 国产精品国产亚洲精品| 欧美大片在线看免费观看| 大型av综合网站| 国产精品极品美女粉嫩高清在线| 国产欧美亚洲精品a| 国产在线拍偷自揄拍精品| 国产精品大片| 视频一区二区在线观看| 国产精品自产自拍| 日本一极黄色片| 亚洲乱码中文字幕| 小水嫩精品福利视频导航| 91黄色免费网站| 欧洲一区二区三区| 色七七影院综合| 亚洲调教一区| 国产丝袜不卡| 国产乱淫av一区二区三区| 欧美 国产 小说 另类| 亚洲精品视频自拍| 91caoporn在线| 亚洲欧美日韩中文视频| xxxx日韩| 97超级碰碰| 激情综合网最新| 黄大色黄女片18第一次| 欧美性猛交99久久久久99按摩| 丝袜国产在线| 欧美日韩国产va另类| 99久久亚洲精品| 在线电影看在线一区二区三区| 91老司机福利 在线| 亚洲欧洲动漫| 日韩av影视在线| 婷婷精品在线观看| 日本一区二区三区精品视频| 欧美在线观看网址综合| 99热在线成人| 久久99国产精品一区| 最新中文字幕一区二区三区| 午夜免费播放观看在线视频| 色哟哟网站入口亚洲精品| 日韩精品水蜜桃| 法国空姐在线观看免费| 亚洲成人一区二区| 国产精品一区二区av影院萌芽| 4438全国成人免费| 日日噜噜夜夜狠狠视频欧美人| 午夜肉伦伦影院| 精品视频1区2区| 6080成人| 日韩精品一区二区三区色偷偷| 国产精品久久久久婷婷| 日韩三级免费| 国产精品福利在线| 成人少妇影院yyyy| h视频在线免费| 97视频在线观看网址| 欧美aaaaaa午夜精品| 成人在线小说| 久久久国产视频| 久久精品男女| 91午夜在线| 久久久精品国产一区二区| 国产日韩1区| 激情六月婷婷| 一区二区欧美在线| 欧美私人啪啪vps| 一级在线免费视频| 日韩精品一二三四区| 亚洲激情五月| 成人黄色激情网站| 最新国产精品拍自在线播放 | 超碰97人人射妻| 日韩一级片在线播放| 日韩久久久久| 中国黄色片免费看| 色偷偷亚洲男人天堂| 美洲天堂一区二卡三卡四卡视频| 污黄网站在线观看| 欧美一级黑人aaaaaaa做受| 成人福利视频在线看| 人人澡人人添人人爽一区二区| 国产一区红桃视频| 亚洲免费观看高清完整版在线观看熊| 高清毛片在线观看| 久久综合毛片| 欧美日韩亚洲激情| 伊人久久大香线蕉综合网站| 999精品网站| 最近中文字幕mv在线一区二区三区四区| 久久一区中文字幕| 182tv在线播放| 美女主播视频一区| 欧美一区二区三区四区视频| 欧美99在线视频观看| 中文字幕在线视频免费观看| 国产脚交av在线一区二区| 亚洲图片激情小说| 色综合久久中文| 国产成免费视频| 国产91精品在线播放| 自拍视频在线观看一区二区| 欧美aaaaaaaa牛牛影院| 69国产精品| 日韩美女在线看| 婷婷丁香激情综合| 欧美电影免费| 成人在线免费电影| 欧美日韩精品免费观看| 日韩欧美国产综合| 精品一区二区在线播放| 都市激情亚洲综合| 毛片av免费在线观看| 久久人人97超碰精品888| 亚洲国产高清在线| 激情五月综合| 视频一区二区在线播放| 国产伦精品一区二区三区免| 日韩欧美国产系列| 国产精品99久久久久| 久久精品一级| 美女黄视频在线播放 | 黄色片免费在线观看视频| 亚洲欧洲日本专区| 99re这里都是精品| 北条麻妃一区二区三区在线观看| 日本老熟妇毛茸茸| 国产精品成人aaaaa网站| 欧美视频在线观看免费| 久久电影一区| 欧美爱爱视频| 三级黄色的网站| 亚洲自拍偷拍网址| 日韩美一区二区三区| 成人av在线一区二区三区| 中文一区二区三区四区| 中文视频在线| 亚洲国产精品日韩| 欧美精品在线视频观看| 亚洲一区二区三区四区五区中文| 在线观看视频免费一区二区三区| 蜜臀国产一区| 猫咪av永久| 一区二区三区精品国产| 久久久欧美精品|