欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、濱江ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的濱江網(wǎng)站制作公司

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

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

從上面的聲明中可以看出來(lái),我們?cè)诙x了一個(gè)數(shù)組的時(shí)候,必須指定這個(gè)數(shù)組的數(shù)據(jù)類(lèi)型,也就是說(shuō),數(shù)組是相同數(shù)據(jù)類(lèi)型的集合。另外,在數(shù)組聲明的時(shí)候,我們也聲明了數(shù)組的大小,數(shù)組的元素個(gè)數(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ù)組的長(zhǎng)度屬性
   
   int b[] = {1,2};
   int c[] = {1,2};
   System.out.println(b.equals(c)); //輸出為false,可見(jiàn)數(shù)組并沒(méi)有重寫(xiě)hashcode()和equals()方法
   System.out.println(Arrays.equals(b, c)); //利用java.util.Array的equals()來(lái)判斷數(shù)組是否相等,這里輸出true
   System.out.println(isEquals(b,c));
   
  }

  /**
   * 重寫(xiě)方法來(lái)手動(dòng)實(shí)現(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;
  }
  
}

可見(jiàn),數(shù)組的長(zhǎng)度是固定的,不可變的。數(shù)組并未重寫(xiě)object的hashcCode()和equals()方法。

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

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

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

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

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

下面,我們?cè)賮?lái)看看ArrayList這個(gè)集合:

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

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

第一種聲明中,在不使用泛型的情況下,這個(gè)list是可以添加進(jìn)不同類(lèi)型的元素的,而且arraylist是可以不用指定長(zhǎng)度的。在使用泛型時(shí),我們就只能添加一種類(lèi)型的數(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)); //是否包含某個(gè)元素
    System.out.println(list.size()); //list的長(zhǎng)度
    System.out.println(list.get(0)); //按位獲取list中的元素
    list.trimToSize(); //這個(gè)方法用于將ArrayList固定到實(shí)際元素的大小,當(dāng)動(dòng)態(tài)數(shù)組元素確定不在添加的時(shí)候,可以調(diào)用這個(gè)方法來(lái)釋放空余的內(nèi)存

上面顯示了ArrayList的一些重要的方法。下面我們就這兩個(gè)集合類(lèi)進(jìn)行對(duì)比:

(1)ArrayList是Array的復(fù)雜版本

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

(2)存儲(chǔ)的數(shù)據(jù)類(lèi)型

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

(3)長(zhǎng)度的可變

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

(4)存取和增刪元素

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

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

以上這篇詳談Array和ArrayList的區(qū)別與聯(lián)系就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。

新聞標(biāo)題:詳談Array和ArrayList的區(qū)別與聯(lián)系
分享網(wǎng)址:http://chinadenli.net/article2/jhhgoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、App設(shè)計(jì)用戶體驗(yàn)、網(wǎng)站建設(shè)、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)