數組和集合的區別


 

一、數組和集合的定義

1、數組的定義

  數組是java語言內置的數據類型,它是一個線性的序列,所以能快速訪問其他的元素,數組和其他語言不同,當你創建了一個數組時,它的容量是不變的,而且在生命周期也是不能改變的,還有JAVA數組會做邊界檢查,如果發現有越界現象,會報RuntimeException異常錯誤,當然檢查邊界會以效率為代價

2、集合的定義

  數組長度是固定,當添加的元素超過了數組的長度時需要對數組重新定義, 這樣太麻煩了! 所以, Java內部給我們提供了集合類,能存儲任意對象,長度是可以改變的,隨着元素的增加而增加,隨着元素的減少而減少。 

  JAVA還提供其他集合,list,map,set,他們處理對象的時候就好像這些對象沒有自己的類型一樣,而是直接歸根於Object,這樣只需要創建一個集合,把對象放進去,取出時轉換成自己的類型就行了。

 

二、數組和集合的區別

1、數組和集合的比較

(1)數組的特點

  a.數組本質上就是一段連續的內存空間,用於記錄多個類型相同的數據

  b.數組一旦聲明完畢,則內存空間固定不變

  c.插入和刪除操作不方便,可能會移動大量的元素導致效率太低;

  d.支持下標訪問,可以實現隨機訪問

  e.數組中的元素可以是基本數據類型,也可以使用引用數據類型

  f.數組是java語言中內置的數據類型,是線性排列的,執行效率或者類型檢查(不懂),都是最快的.

 

(2)集合的特點

  a.內存空間可以不連續,數據類型可以不相同

  b.集合的內存空間可以動態地調整

  c.集合的插入刪除操作方便,可以不移動大量元素;

  d.部分支持下標訪問(例如list),部分不支持;  ArrayList就是基於數組創建的容器類.

  e.集合中的元素必須是引用數據類型

 

2、數組和集合的區別

  一、數組聲明了它容納的元素的類型,而集合不聲明。

  二、數組是靜態的,一個數組實例具有固定的大小,一旦創建了就無法改變容量了。而集合是可以動態擴展容量,可以根據需要動態改變大小,集合提供更多的成員方法,能滿足更多的需求。

  三、數組既可以存儲基本數據類型 ,又可以存儲引用數據類型, 基本數據類型存儲的是值,引用數據類型存儲的是地址值; 一個數組的存放的類型只能是一種(基本類型/引用類型)。

    集合存放的類型可以不是一種(不加泛型時添加的類型是Object)。(與Java數組不同,Java集合中不能存放基本類型數據,而只能存放對象的引用)。集合只能存儲引用數據類型(對象), 集合中也可以存儲基本數據類型,但是存儲的時候會自動裝箱(JDK1.5新特性)變成對象.

  四、數組是java語言中內置的數據類型,是線性排列的,執行效率或者類型檢查都是最快的。 

  五、若程序時不知道究竟需要多少對象,需要在空間不足時自動擴增容量,則需要使用容器類庫(ArrayList就是基於數組創建的容器類),array不適用。

 

數組不是面向對象的,存在明顯的缺陷,集合完全彌補了數組的一些缺點,比數組更靈活更實用,可大大提高軟件的開發效率而且不同的集合框架類可適用於不同場合。 具體如下:

  1、數組優點

    1)數組的效率高於集合類.

    2)數組能存放基本數據類型和對象,而集合類中只能放對象。

  2、數組缺點

    3)數組容量固定且無法動態改變,集合類容量動態改變。

    4)數組無法判斷其中實際存有多少元素length只告訴了array的容量

  3、集合優點

    5)集合有多種實現方式和不同的適用場合,而不像數組僅采用順序表方式

    6)集合以類的形式存在,具有封裝、繼承、多態等類的特性,通過簡單的方法和屬性調用即可實現各種復雜操作,大大提高軟件的開發效率

 

三、使用情況:

  1. 如果元素個數是固定的, 推薦用數組

  2. 如果元素個數不是固定的, 推薦用集合

聯系:使用相應的toArray()和Arrays.asList()方法可以互相轉換。

 

四、轉換

1、數組轉換為集合:

Arrays.asList(數組)

示例:

int[] arr = {1,3,4,6,6}; Arrays.asList(arr); for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); }

  

2、集合轉換為數組:

集合.toArray();

示例:

List list = new ArrayList(); list.add("a"); list.add("b"); list.toArray(); System.out.println(list.toString());

 

 
轉載地址:
https://blog.51cto.com/14512197/2436215
https://www.cnblogs.com/aspirant/p/10396220.html
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM