Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android編程之SparseArray(E)詳解

Android編程之SparseArray(E)詳解

編輯:關於Android編程

最近編程時,發現一個針對HashMap的一個提示:
\

翻譯過來就是:用SparseArray來代替會有更好性能。
那我們就來看看源碼中SparseArray到底做了哪些事情:

一、構造
從構造方法我們可以看出,它和一般的List一樣,可以預先設置容器大小,默認的大小是10:
  1. publicSparseArray(){
  2. this(10);
  3. }
  4.  
  5.  
  6. publicSparseArray(intinitialCapacity){
  7. ......
  8. }
二、增
它有兩個方法可以添加鍵值對:
  1. publicvoidput(intkey,Evalue)
  2. publicvoidappend(intkey,Evalue)
在存儲數據的時候,是采用了二分法方式,以下是它采用二分法的源碼:
  1. privatestaticintbinarySearch(int[]a,intstart,intlen,intkey){
  2. inthigh=start+len;
  3. intlow=start-1;
  4.  
  5.  
  6. while(high-low>1){
  7. intguess=(high+low)/2;
  8.  
  9.  
  10. if(a[guess] low=guess;
  11. continue;
  12. }
  13. high=guess;
  14. }
  15.  
  16.  
  17. if(high==start+len)
  18. returnstart+len^0xFFFFFFFF;
  19. if(a[high]==key){
  20. returnhigh;
  21. }
  22. returnhigh^0xFFFFFFFF;
  23. }
所以,它存儲的數值都是按鍵值從小到大的順序排列好的。


三、查
它有兩個方法可以取值:
  1. publicEget(intkey)
  2. publicEget(intkey,EvalueIfKeyNotFound)
最後一個從傳參的變量名就能看出,傳入的是找不到的時候返回的值


查看第幾個位置的鍵:
  1. publicintkeyAt(intindex)
查看第幾個位置的值:
  1. publicEvalueAt(intindex)
查看鍵所在位置,由於采用二分法查找鍵的位置,所以沒有的話返回小於0的數值,而不是返回-1,這點要注意,返回的負數其實是表示它在哪個位置就找不到了,如果你存了5個,查找的鍵大於5個值的話,返回就是-6:
 
  1. publicintindexOfKey(intkey)
查看值所在位置,沒有的話返回-1:
  1. publicintindexOfValue(Evalue)

四、刪
它有四個方法:
  1. publicvoiddelete(intkey)
  2. publicvoidremove(intkey)
但其實,delete和remove的效果是一樣的,remove方法中調用了delete方法,remove源碼:
  1. publicvoidremove(intkey){
  2. delete(key);
  3. }
  4. publicvoidremoveAt(intindex)
  5. publicvoidclear()
最後一個就是清除全部


五、改
  1. publicvoidsetValueAt(intindex,Evalue)
  2. publicvoidput(intkey,Evalue)
put方法還可以修改鍵值對,注意:如果鍵不存在,就會變為添加新鍵值對


六、其他:
SparseArray實現了Cloneable接口,還可以調用clone方法。


小結:既然android系統建議我們用SparseArray來代替HashMap,那我們還是按它說的做吧。裡面的一些方法,我在這裡也已經剖析清楚了,希望能對你們有所幫助。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved