最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳談Array和ArrayList的區(qū)別與聯(lián)系

 更新時間:2017年06月14日 08:33:55   投稿:jingxian  
下面小編就為大家?guī)硪黄斦凙rray和ArrayList的區(qū)別與聯(lián)系。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

昨天去了一個java的實習面試,發(fā)現(xiàn)有好多java最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)對于博主來說反而感到陌生,在面試官問一些常見的例如HashMap這樣的數(shù)據(jù)結(jié)構(gòu),博主能回答的頭頭是道,但是在問到Array和ArrayList的區(qū)別和聯(lián)系之后,卻讓博主一臉懵。好吧,不多說,現(xiàn)在特此整理。

首先, Array是java中的數(shù)組,我們聲明java的數(shù)組有三種方式:

int[] a = new int[10]; 
int a[] = new int[10]; //這種方式同c語言一樣
int a[] = {1,2,3,4}; 

從上面的聲明中可以看出來,我們在定義了一個數(shù)組的時候,必須指定這個數(shù)組的數(shù)據(jù)類型,也就是說,數(shù)組是相同數(shù)據(jù)類型的集合。另外,在數(shù)組聲明的時候,我們也聲明了數(shù)組的大小,數(shù)組的元素個數(shù)是固定的。

下面,我們看看數(shù)組的應(yīng)用:

import java.util.Arrays;

/**
 * @author jy
 * @time 下午7:59:26
 */
public class ArrayAndArrayList {
  public static void main(String[] args) {
    
   int a[] = new int[4];
   System.out.println(a.length); //數(shù)組的長度屬性
   
   int b[] = {1,2};
   int c[] = {1,2};
   System.out.println(b.equals(c)); //輸出為false,可見數(shù)組并沒有重寫hashcode()和equals()方法
   System.out.println(Arrays.equals(b, c)); //利用java.util.Array的equals()來判斷數(shù)組是否相等,這里輸出true
   System.out.println(isEquals(b,c));
   
  }

  /**
   * 重寫方法來手動實現(xiàn)數(shù)組之間的比較方法
   */
  public static boolean isEquals(int[] b, int[] c) {
    
    if(b.length != c.length){
      return false;
    }
    if(b == null ||c == null){
      return false;
    }
    for (int i = 0; i < c.length; i ++) {
      if(b[i] != c[i]){
        return false;
      }
    }
    return true;
  }
  
}

可見,數(shù)組的長度是固定的,不可變的。數(shù)組并未重寫object的hashcCode()和equals()方法。

我們都知道,數(shù)組還可以是二維的,下面我們看看二維數(shù)組是如何聲明的:

 int[][] da = new int[2][3]; //推薦用這種聲明方式,更能表明數(shù)組的類型
 int db[][] = new int[4][3];

但是,有一種變長的二維數(shù)組:

 int[][] dc = new int[2][]; //第一維的大小不能空缺,第二維的大小可以是不一樣的。
 dc[0] = new int[2];
 dc[1] = new int[3];

好了,數(shù)組這個基本的數(shù)據(jù)結(jié)構(gòu)的應(yīng)用我們就說到這里,為了突出主題,其余的一些不相干的應(yīng)用我們就不扯了。

下面,我們再來看看ArrayList這個集合:

ArrayList是動態(tài)數(shù)組,也就是數(shù)組的復雜版本,它可以動態(tài)的添加和刪除元素,ArrayList實現(xiàn)了java.util.Collections.Collection.List接口。下面我們來看一下最基本的聲明:

ArrayList list = new ArrayList(10); 
ArrayList<Integer> list1 = new ArrayList<Integer>();

第一種聲明中,在不使用泛型的情況下,這個list是可以添加進不同類型的元素的,而且arraylist是可以不用指定長度的。在使用泛型時,我們就只能添加一種類型的數(shù)據(jù)了。

ArrayList的重要方法和屬性如下代碼所示:

ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.remove(1);
    Object[] p = list.toArray(); //轉(zhuǎn)化成數(shù)組
    System.out.println(p[0]);
    System.out.println(list.contains(4)); //是否包含某個元素
    System.out.println(list.size()); //list的長度
    System.out.println(list.get(0)); //按位獲取list中的元素
    list.trimToSize(); //這個方法用于將ArrayList固定到實際元素的大小,當動態(tài)數(shù)組元素確定不在添加的時候,可以調(diào)用這個方法來釋放空余的內(nèi)存

上面顯示了ArrayList的一些重要的方法。下面我們就這兩個集合類進行對比:

(1)ArrayList是Array的復雜版本

ArrayList內(nèi)部封裝了一個Object類型的數(shù)組,從一般的意義來說,它和數(shù)組沒有本質(zhì)的差別,甚至于ArrayList的許多方法,如Index、IndexOf、Contains、Sort等都是在內(nèi)部數(shù)組的基礎(chǔ)上直接調(diào)用Array的對應(yīng)方法。

(2)存儲的數(shù)據(jù)類型

ArrayList可以存儲異構(gòu)對象,而Array只能存儲相同數(shù)據(jù)類型的數(shù)據(jù)。

(3)長度的可變

Array的長度實際上是不可變的,二維變長數(shù)組實際上的長度也是固定的,可變的只是其中元素的長度。而ArrayList的長度既可以指定(即使指定了長度,也會自動2倍擴容)也可以不指定,是變長的。

(4)存取和增刪元素

對于一般的引用類型來說,這部分的影響不是很大,但是對于值類型來說,往ArrayList里面添加和修改元素,都會引起裝箱和拆箱的操作,頻繁的操作可能會影響一部分效率。另外,ArrayList是動態(tài)數(shù)組,它不包括通過Key或者Value快速訪問的算法,所以實際上調(diào)用IndexOf、Contains等方法是執(zhí)行的簡單的循環(huán)來查找元素,所以頻繁的調(diào)用此類方法并不比你自己寫循環(huán)并且稍作優(yōu)化來的快,如果有這方面的要求,建議使用Hashtable或SortedList等鍵值對的集合。

好了,關(guān)于這兩個數(shù)據(jù)結(jié)構(gòu)的對比我們就到這里,如果有覺得不妥的地方,歡迎大家指正。

以上這篇詳談Array和ArrayList的區(qū)別與聯(lián)系就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java并發(fā)工具輔助類代碼實例

    Java并發(fā)工具輔助類代碼實例

    這篇文章主要介紹了Java并發(fā)工具輔助類代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java二叉樹路徑和代碼示例

    Java二叉樹路徑和代碼示例

    這篇文章主要介紹了Java二叉樹路徑和代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot使用Spring Security實現(xiàn)登錄注銷功能

    SpringBoot使用Spring Security實現(xiàn)登錄注銷功能

    這篇文章主要介紹了SpringBoot使用Spring Security實現(xiàn)登錄注銷功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • java多線程通過CompletableFuture組裝異步計算單元

    java多線程通過CompletableFuture組裝異步計算單元

    這篇文章主要為大家介紹了java多線程通過CompletableFuture組裝異步計算單元,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java注解簡單使用實例解析

    Java注解簡單使用實例解析

    這篇文章主要介紹了Java注解簡單使用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java中遇到的For?input?string問題解決辦法

    Java中遇到的For?input?string問題解決辦法

    這篇文章主要給大家介紹了關(guān)于Java中遇到的For?input?string問題的解決辦法,如果出現(xiàn)這樣的異常報錯,是指的數(shù)據(jù)轉(zhuǎn)換時出錯,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • java壓縮zip文件中文亂碼問題解決方法

    java壓縮zip文件中文亂碼問題解決方法

    這篇文章主要介紹了java壓縮zip文件中文亂碼問題的解決方法,需要的朋友可以參考下
    2014-07-07
  • 詳解Java中LinkedHashMap

    詳解Java中LinkedHashMap

    本文主要介紹了Java中LinkedHashMap的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Springboot集成spring data elasticsearch過程詳解

    Springboot集成spring data elasticsearch過程詳解

    這篇文章主要介紹了springboot集成spring data elasticsearch過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Spring使用注解進行對象裝配(DI)的操作

    Spring使用注解進行對象裝配(DI)的操作

    獲取Bean對象也叫做對象裝配,就是把對象取出來放到某個類中,有時候也叫對象注入,這篇文章主要介紹了Spring使用注解進行對象裝配(DI),需要的朋友可以參考下
    2023-07-07

最新評論

普定县| 科技| 宾阳县| 鹤山市| 松滋市| 武城县| 新营市| 高邮市| 阳山县| 毕节市| 额敏县| 静乐县| 安义县| 禹城市| 石门县| 南漳县| 花垣县| 宜宾县| 永顺县| 通山县| 九江县| 铜山县| 涡阳县| 兴和县| 大丰市| 油尖旺区| 额尔古纳市| 四会市| 淄博市| 钦州市| 建湖县| 哈密市| 定安县| 吕梁市| 大竹县| 厦门市| 南投市| 上蔡县| 拜城县| 龙南县| 富民县|