android 常用的數(shù)據(jù)結(jié)構(gòu)

哎,哪里不會補哪里吧俏拱!
Android中一般使用的數(shù)據(jù)結(jié)構(gòu)有Java中的基礎數(shù)據(jù)結(jié)構(gòu)Set, List, Map暑塑。還有一個 SparseArray(使用Map時Key是int類型的時候可以用這個代替)。

先看看這個圖


20150629084321323.jpg
Collction

Collction 是所有集合類的接口锅必。Set 和 List都是繼承了這個接口事格。Set和List中都有的方法如下。

boolean add(Object o) :向集合中加入一個對象的引用

void clear():刪除集合中所有的對象搞隐,即不再持有這些對象的引用

boolean isEmpty() :判斷集合是否為空

boolean contains(Object o) : 判斷集合中是否持有特定對象的引用

Iterartor iterator() :返回一個Iterator對象驹愚,可以用來遍歷集合中的元素

boolean remove(Object o) :從集合中刪除一個對象的引用

int size() :返回集合中元素的數(shù)目

Object[] toArray() : 返回一個數(shù)組,該數(shù)組中包括集合中的所有元素

關于:Iterator() 和toArray() 方法都用于集合的所有的元素劣纲,前者返回一個Iterator對象逢捺,后者返回一個包含集合中所有元素的數(shù)組。
Set

Set是最簡單的一種集合癞季。集合中的對象不按特定的方式排序劫瞳,并且沒有重復對象。

Set接口主要實現(xiàn)了兩個實現(xiàn)類:

  • HashSet: HashSet類按照哈希算法來存取集合中的對象绷柒,存取速度比較快
  • TreeSet :TreeSet類實現(xiàn)了SortedSet接口志于,能夠?qū)现械膶ο筮M行排序。
        Set<String> set=new HashSet<>();
        String string=new String("hellow World");
        String string2=string;
        String string3=new String("hellow World");
        set.add(string);
        set.add(string2);
        set.add(string3);
        
        System.out.println(set.size());//打印的結(jié)果是1
        System.out.println(set);//打印的是 {hellow World}

既然其中的數(shù)據(jù)不能重復废睦,那么add()的時候是怎么判斷你的呢伺绽?

boolean isExists=false;  
Iterator iterator=set.iterator();  
while(it.hasNext()){  
  String oldStr=it.next();  
  if(newStr.equals(oldStr)){  
    isExists=true;  
  }  
}

進行循環(huán)比較數(shù)據(jù),看看是否重復郊楣。

List(列表)

List的特征是其元素以線性方式存儲憔恳,集合中可以存放重復對象。

List接口主要實現(xiàn)類包括:

  • ArrayList() : 長度可以改變得數(shù)組净蚤≡孔椋可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢今瀑。
  • LinkedList(): 在實現(xiàn)中采用鏈表數(shù)據(jù)結(jié)構(gòu)程梦。插入和刪除速度快点把,訪問速度慢。

對于List的隨機訪問來說屿附,就是只隨機來檢索位于特定位置的元素郎逃。 List 的 get(int index) 方法放回集合中由參數(shù)index指定的索引位置的對象,下標從“0” 開始挺份。最基本的兩種檢索集合中的所有對象的方法:
兩種檢索方法

for循環(huán)

for(int i=0; i<list.size();i++){  
  System.out.println(list.get(i));  
}

迭代器

Iterator it=list.iterator();  
while(it.hashNext){  
  System.out.println(it.next);  
}
Map(映射)

Map 是一種把鍵對象和值對象映射的集合褒翰,它的每一個元素都包含一對鍵對象和值對象。 Map沒有繼承于Collection接口 從Map集合中檢索元素時匀泊,只要給出鍵對象优训,就會返回對應的值對象。

Map中常用的方法:

  • 添加各聘、刪除操作:
Object put(Object key, Object value): 向集合中加入元素

Object remove(Object key): 刪除與KEY相關的元素

void putAll(Map t): 將來自特定映像的所有元素添加給該映像

void clear():從映像中刪除所有映射

還有其他的一些方法

boolean containsKey(Object key): 判斷映像中是否存在關鍵字key

boolean containsValue(Object value):判斷映像中是否存在值value

int size():返回當前映像中映射的數(shù)量

boolean isEmpty() :判斷映像中是否有任何映射
 
Collections集合實用類

Collections提供了供JAVA集合實用的靜態(tài)方法揣非。提供了很多 List /Map 實用的方法,對平常開發(fā)非常有用躲因。

總結(jié)

List按對象進入的順序保存對象早敬,不做排序或編輯操作。Set對每個對象只接受一次大脉,并使用自己內(nèi)部的排序方法(通常搞监,你只關心某個元素是否屬于 Set,而不關心它的順序--否則應該使用List)。Map同樣對每個元素保存一份箱靴,但這是基于"鍵"的腺逛,Map也有內(nèi)置的排序,因而不關心元素添加的 順序衡怀。如果添加元素的順序?qū)δ愫苤匾瑧撌褂?LinkedHashSet或者LinkedHashMap.

List的功能方法

實際上有兩種List:一種是基本的ArrayList,其優(yōu)點在于隨機訪問元素安疗,另一種是更強大的LinkedList,它并不是為快速隨機訪問設計的抛杨,而是具有一套更通用的方法。

List:次序是List最重要的特點:它保證維護元素特定的順序荐类。List為Collection添加了許多方法怖现,使得能夠向List中間插入與移除元素(這只推薦LinkedList使用。)一個List可以生成ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素玉罐。

ArrayList:由數(shù)組實現(xiàn)的List屈嗤。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢吊输。ListIterator只應該用來由后向前遍歷 ArrayList,而不是用來插入和移除元素饶号。因為那比LinkedList開銷要大很多。

LinkedList :對順序訪問進行了優(yōu)化季蚂,向List中間插入與刪除的開銷并不大茫船。隨機訪問則相對較慢琅束。(使用ArrayList代替)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些方法 (沒有在任何接口或基類中定義過)使得LinkedList可以當作堆棧、隊列和雙向隊列使用算谈。

Set的功能方法

Set具有與Collection完全一樣的接口涩禀,因此沒有任何額外的功能,不像前面有兩個不同的List然眼。實際上Set就是Collection,只是行為不同艾船。(這是繼承與多態(tài)思想的典型應用:表現(xiàn)不同的行為。)Set不保存重復的元素(至于如何判斷元素相同則較為負責)

Set : 存入Set的每個元素都必須是唯一的高每,因為Set不保存重復元素丽声。加入Set的元素必須定義equals()方法以確保對象的唯一性。Set與Collection有完全一樣的接口觉义。Set接口不保證維護元素的次序雁社。

HashSet:為快速查找設計的Set。存入HashSet的對象必須定義hashCode()晒骇。

TreeSet: 保存次序的Set, 底層為樹結(jié)構(gòu)霉撵。使用它可以從Set中提取有序的序列。

LinkedHashSet:具有HashSet的查詢速度洪囤,且內(nèi)部使用鏈表維護元素的順序(插入的次序)徒坡。于是在使用迭代器遍歷Set時,結(jié)果會按元素插入的次序顯示瘤缩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喇完,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剥啤,更是在濱河造成了極大的恐慌锦溪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府怯,死亡現(xiàn)場離奇詭異刻诊,居然都是意外死亡,警方通過查閱死者的電腦和手機牺丙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門则涯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冲簿,你說我怎么就攤上這事粟判。” “怎么了峦剔?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵档礁,是天一觀的道長。 經(jīng)常有香客問我羊异,道長事秀,這世上最難降的妖魔是什么彤断? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮易迹,結(jié)果婚禮上宰衙,老公的妹妹穿的比我還像新娘。我一直安慰自己睹欲,他們只是感情好供炼,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窘疮,像睡著了一般袋哼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闸衫,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天涛贯,我揣著相機與錄音,去河邊找鬼蔚出。 笑死弟翘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的骄酗。 我是一名探鬼主播稀余,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趋翻!你這毒婦竟也來了睛琳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踏烙,失蹤者是張志新(化名)和其女友劉穎师骗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宙帝,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡丧凤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了步脓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡浩螺,死狀恐怖靴患,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情要出,我是刑警寧澤鸳君,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站患蹂,受9級特大地震影響或颊,放射性物質(zhì)發(fā)生泄漏砸紊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一囱挑、第九天 我趴在偏房一處隱蔽的房頂上張望醉顽。 院中可真熱鬧,春花似錦平挑、人聲如沸游添。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唆涝。三九已至,卻和暖如春唇辨,著一層夾襖步出監(jiān)牢的瞬間廊酣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工赏枚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亡驰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓嗡贺,卻偏偏與公主長得像隐解,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诫睬,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容