本人是一名大學生,在學校運用到i這類知識的時候,一般總是使用陣列,但是發現有很多問題陣列解決不了。但是其他兩種方式也不怎麼熟悉作用,也不會使用。三者經常不會區分,而是混為一談的記憶。所以接下來我會帶大家分析一下三者的區別以及作用。
一,首先我們先來看一下陣列
陣列優點是在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元素也很簡單.
比如:string s=new string[5];//定義初始化長度
s[0]=「1」; s[1]=「2」; s[2]=「3」;//賦值
s[1]=「1」;//修改
此時陣列資料為113;
陣列的缺點也是主要不用的原因就是陣列的長度不可以是動態的,陣列使用時必須定義它的長度,所以對於記憶體資源來說,定義是長度的長或短都是不行的。
二、集合arraylist
針對陣列的主要缺點,arraylist在宣告arraylist物件時並不需要指定它的長度。它的大小是按照其中儲存的資料來動態擴充與收縮的。arraylist繼承了ilist介面,所以它可以很方便的進行資料的新增,插入和移除.比如:
arraylist list = new arraylist();
//新增資料
list.add(「abc」); list.add(123);
//修改資料
list[2] = 345;
//移除資料
list.removeat(0);
//插入資料
list.insert(0, 「hello world」);
從arraylist來看,它已經彌補了陣列的主要缺點,但是它也有自己的缺點:
當向集合插入不同型別的資料後(arraylist將資料當作object儲存),如果需要同時處理集合中的資料時,必須將資料型別轉換處理,以及涉及到裝箱和拆箱的操作,也會造成不必要的資源浪費。
提到了裝箱與拆箱,以下簡單介紹一下:
裝箱:就是將資料型別打包儲存為object的引用物件。
比如:int a=1; object b=(object)a;
拆箱:就是將包裝好的資料物件,拆成自己想要的型別。
比如:object b=1; int i=(int)b;
三、泛型list
所以根據陣列,arraylist兩種缺點又繼續推出了泛型list集合。
優點:與集合arraylist類似且繼承ilist介面,也是動態擴容或縮容,在宣告list集合時必須宣告其中所要儲存的資料型別,且集合只能儲存相應型別,避免了型別轉換的問題。
例如:list list=new list();
list.add(123);
list[0]=111;//修改
list.removeat(0);//移除
如果list.add(「abc」);//編譯器就會報錯,避免了型別安全問題與裝箱拆箱的效能問題。
list泛型的好處:
通過允許指定泛型類或方法操作的特定型別,泛型功能將型別安全的任務從本身轉移給了編譯器,減少了自身對型別安全的檢測以及不必要的資源浪費。
總的來說,三者都是儲存資料的方式,需要自身根據對應情況,選擇適合自己的儲存方式,使**更效率,減少不必要的資源浪費。
集合與陣列
system.collections命名空間 c icollection d lists和ilist e 字典和idictionary f 雜湊表 g sortedlist h queue和stack 字典和idictionary idictionary擴充套件了icollection,但不表示可以...
陣列,字典,集合
1.nsstring 初始化方法 nsstring initwithformat d,a,b int a 1000 nsstring str1 nsstring alloc initwithformat zhangsan d a nsstring stringwithformat nsstring ...
Swift 陣列 集合
宣告 初始化 vararray003 string vararray0031 string varnewarray double count 4,repeatedvalue 1.1 建立特定大小和內容的陣列 或者array count 4,repeatedvalue 1.1 varintarr1 i...