java基礎 list和arrayList的區別

2021-09-03 07:08:29 字數 1029 閱讀 2019

裝箱:在值型別向引用型別轉換時發生;

拆箱:在引用型別向值型別轉換時發生;

值型別:直接將記憶體儲存在棧內,由系統自動釋放資源的資料型別;

引用型別:由型別的實際值引用(類似於指標)表示的資料型別,通俗點說就是在程式設計時需要new出來的變數型別都是引用型,引用型別是存放在記憶體的堆中;

記憶體堆跟棧的定義跟資料結構的堆疊是不同的

棧:由大至小的分配,先進後出,直接存放值型別的地方;我們一般出現的記憶體溢位就是由於棧位都分配完了;

堆:由小至大的分配,隨意儲存,存放引用型別的地方;

list介面是乙個有序集合,其元素以線性方法儲存,集合中允許存放重複的元素。

array類實現list介面,可以直接通過arraylist為list介面例項化。arraylistl類是陣列列表類,實現了可變長度的陣列。 list是乙個介面,而arraylist是list介面的乙個實現類。 

arraylist類繼承並實現了list介面。 

因此,list介面不能被構造,也就是我們說的不能建立例項物件,但是我們可以像下面那樣為list介面建立乙個指

向自己的物件引用,而arraylist實現類的例項物件就在這充當了這個指向list介面的物件引用。

由於arraylist的每個item預設是object的型別,所以當我們執行語句list.add(1);的時候,就是做了一次裝箱的操作。同理,在for迴圈裡list的每一項都要做乙個拆箱的操作才能得到變數i,最後到列印變數i時,由於字串也是引用型別,所以也要做一次的裝箱的操作。這裡前後一共做了6次的裝箱拆箱(4次裝箱,2次拆箱),每一次的裝箱拆箱都涉及cpu以及記憶體的分配,都是效能的損耗。

由於list使用了泛型,我們指定了item必需是int型別,所以在add item的時候,不需要再進行裝箱拆箱的操作,一直到列印i的時候,才需要做裝箱的操作,整段**執行完以後,一共才進行2次的裝箱拆箱(2次裝箱,0次拆箱)。

如果list的item多,程式執行時,相對於arraylist來說就會節省很多的系統資源。所以list與arraylist的使用區別,到最後就是效能的表現問題。

Java基礎系列 List排序

public static super t void sort listlist public static void sort listlist,comparator c 複製 public class objectsort class studentcomparator implements c...

Java基礎學習之集合 List

1.addall removeall retainall collection c1 new arraylist c1.add a c1.add b c1.add c c1.add d collection c2 new arraylist c2.add a c2.add b c2.add c c2...

Java基礎14 集合List

注意 1.list集合 arraylist,linkedlist,vector 是根據 equals 方法進行元素的相等判斷的,由於list集合是可以重複的,那麼在使用remove,contains等方法時,就是根據equals來的.2.只有實現了iterable介面的類,才可以進行for each...