學(xué)習(xí)啦 > 生活課堂 > 生活小常識(shí) > 集合跟數(shù)組的區(qū)別

集合跟數(shù)組的區(qū)別

時(shí)間: 岳彬1043 分享

集合跟數(shù)組的區(qū)別

  在學(xué)習(xí)計(jì)算機(jī)語(yǔ)言Java中會(huì)遇到許多問(wèn)題,例如集合跟數(shù)組的區(qū)別,下面是學(xué)習(xí)啦小編為你整理的集合跟數(shù)組的區(qū)別,供大家閱覽!

  數(shù)組Array和集合的區(qū)別:

  (1)數(shù)組是大小固定的,并且同一個(gè)數(shù)組只能存放類(lèi)型一樣的數(shù)據(jù)(基本類(lèi)型/引用類(lèi)型)

  (2)JAVA集合可以存儲(chǔ)和操作數(shù)目不固定的一組數(shù)據(jù)。 (3)若程序時(shí)不知道究竟需要多少對(duì)象,需要在空間不足時(shí)自動(dòng)擴(kuò)增容量,則需要使用容器類(lèi)庫(kù),array不適用。

  聯(lián)系:使用相應(yīng)的toArray()和Arrays.asList()方法可以回想轉(zhuǎn)換。

  集合的體系結(jié)構(gòu):

  List、Set、Map是這個(gè)集合體系中最主要的三個(gè)接口。 List和Set繼承自Collection接口。 Map也屬于集合系統(tǒng),但和Collection接口不同。

  Set不允許元素重復(fù)。HashSet和TreeSet是兩個(gè)主要的實(shí)現(xiàn)類(lèi)。Set 只能通過(guò)游標(biāo)來(lái)取值,并且值是不能重復(fù)的。

  List有序且允許元素重復(fù)。ArrayList、LinkedList和Vector是三個(gè)主要的實(shí)現(xiàn)類(lèi)。 ArrayList 是線程不安全的, Vector 是線程安全的,這兩個(gè)類(lèi)底層都是由數(shù)組實(shí)現(xiàn)的 LinkedList 是線程不安全的,底層是由鏈表實(shí)現(xiàn)的

  Map 是鍵值對(duì)集合。其中key列就是一個(gè)集合,key不能重復(fù),但是value可以重復(fù)。 HashMap、TreeMap和Hashtable是Map的三個(gè)主要的實(shí)現(xiàn)類(lèi)。 HashTable 是線程安全的,不能存儲(chǔ) null 值 HashMap 不是線程安全的,可以存儲(chǔ) null 值

  List和ArrayList的區(qū)別

  1.List是接口,List特性就是有序,會(huì)確保以一定的順序保存元素.

  ArrayList是它的實(shí)現(xiàn)類(lèi),是一個(gè)用數(shù)組實(shí)現(xiàn)的List.

  Map是接口,Map特性就是根據(jù)一個(gè)對(duì)象查找對(duì)象.

  HashMap是它的實(shí)現(xiàn)類(lèi),HashMap用hash表實(shí)現(xiàn)的Map,就是利用對(duì)象的hashcode(hashcode()是Object的方法)進(jìn)行快速散列查找.(關(guān)于散列查找,可以參看<<數(shù)據(jù)結(jié)構(gòu)>>)

  2.一般情況下,如果沒(méi)有必要,推薦代碼只同List,Map接口打交道.

  比如:List list = new ArrayList();

  這樣做的原因是list就相當(dāng)于是一個(gè)泛型的實(shí)現(xiàn),如果想改變list的類(lèi)型,只需要:

  List list = new LinkedList();//LinkedList也是List的實(shí)現(xiàn)類(lèi),也是ArrayList的兄弟類(lèi)

  這樣,就不需要修改其它代碼,這就是接口編程的優(yōu)雅之處.

  另外的例子就是,在類(lèi)的方法中,如下聲明:

  private void doMyAction(List list){}

  這樣這個(gè)方法能處理所有實(shí)現(xiàn)了List接口的類(lèi),一定程度上實(shí)現(xiàn)了泛型函數(shù).

  3.如果開(kāi)發(fā)的時(shí)候覺(jué)得ArrayList,HashMap的性能不能滿足你的需要,可以通過(guò)實(shí)現(xiàn)List,Map(或者Collection)來(lái)定制你的自定義類(lèi).

  猜你喜歡:

1.Java程序員集合框架面試題

2.JAVA面試題全集

3.阿里JAVA開(kāi)發(fā)面試常問(wèn)問(wèn)題

4.2016java面試題

5.java語(yǔ)言如何學(xué)習(xí)

6.學(xué)習(xí)java如何入門(mén)

3305429