陣列與ArrayList的關係與區別

2021-09-03 02:34:05 字數 998 閱讀 3594

陣列():最高效;但是其容量固定且無法動態改變;

arraylist:容量可動態增長;但犧牲效率;

建議:首先使用陣列,無法確定陣列大小時才使用arraylist!

1.效率:

陣列擴容是對arraylist效率影響比較大的乙個因素。

每當執行add、addrange、insert、insertrange等新增元素的方法,都會檢查內部陣列的容量是否不夠了,如果是,它就會以當前容量的1.5倍來重新構建乙個陣列,將舊元素copy到新陣列中,然後丟棄舊陣列,在這個臨界點的擴容操作,應該來說是比較影響效率的。

arraylist是array的複雜版本

arraylist內部封裝了乙個object型別的陣列,從一般的意義來說,它和陣列沒有本質的差別,甚至於arraylist的許多方法,如index、indexof、contains、sort等都是在內部陣列的基礎上直接呼叫array的對應方法。

陣列的大小是固定的,不能在不破壞原有資料的前提下伸縮空間,也就是說陣列可以伸縮空間,但是只是在原先的陣列上重新例項化,原先的陣列的資料將會被清空,通過system.array.resize這個泛型方法重置陣列的空間大小,而集合卻能隨意伸縮空間且不破壞原先的資料。

建立陣列的時候需要宣告元素的型別,而集合類預設型別是object,可以這樣認為,陣列是「進去難,出來簡單」,而集合是「進去簡單,出來難」。打比方我宣告了乙個int型別的陣列,也就是說這個陣列只能儲存整數型別的資料,如果我扔乙個string型別的進去就報錯,也就是不讓我存進去,而集合不管是整數型的還是字串型的全可以往裡面扔,因為進去後的資料就會變成object型別的了,但是取出來的時候必須按照先前存進去的型別進行拆箱,所以比較難,陣列讀取資料的速度比集合要快。

陣列可讀可寫,卻不能宣告唯讀型別的陣列,而集合卻能通過 readonly這個修飾符來達到只給讀取資料,不給寫入資料,這樣在安全級別上提高了。

陣列要有整數下標才能訪問特定元素,而集合可以通過下標,也可以通過給定義的名字來訪問,所以說作為讀取資料的前提下,集合的靈活性比較高,而陣列則在有些時候會很麻煩。

陣列與ArrayList的轉換

arraylist 轉換成陣列 arraylist提供public t toarray t a 方法返回乙個按照正確的順序包含此列表中所有元素的陣列 返回陣列的執行時型別就是指定陣列的執行時型別。如果列表能放入指定的陣列,則返回放入此列 表元素的陣列。否則,將根據指定陣列的執行時型別和此列表的大小分...

ArrayList與陣列使用上的區別

1 陣列的容量是固定的 雖然也可以擴充的方法,但不主張 而arraylist的容量是動態的。2 乙個陣列只能儲存一種型別,而arraylist可以儲存不同型別。3 陣列可以儲存基本資料型別,但arraylist不可以,它儲存的是object類的引用,因此在取出元素時,要做型別轉換。4 陣列不能宣告為...

指標與陣列的關係

指標與陣列的關係 指標與陣列是c語言中很重要的兩個概念,它們之間有著密切的關係,利用這種關係,可以增強處理陣列的靈活性,加快執行速度,本文著重討論指標與陣列之間的聯絡及在程式設計中的應用。1 指標與陣列的關係 當乙個指標變數被初始化成陣列名時,就說該指標變數指向了陣列。如 char str 20 p...