由于Android Application 主要是Java語(yǔ)言開發(fā)的,所以在寫程序的時(shí)候,很多朋友們都會(huì)用到Java里面常用的數(shù)據(jù)結(jié)構(gòu),但是Android中提供了更加適合這個(gè)平臺(tái)、好用的數(shù)據(jù)結(jié)構(gòu)和API,下面來(lái)介紹一些常用的但并不是人人都知道的知識(shí)。
一、數(shù)據(jù)結(jié)構(gòu)篇
1.SparseArray —— 替代HashMap,主要有以下幾種
- SparseLongArray
- SparseIntArray
- SparseBooleanArray
- SparseArray
SparseArray比HashMap更省內(nèi)存,它對(duì)數(shù)據(jù)采取了壓縮的方式來(lái)表示稀疏數(shù)組的數(shù)據(jù),從而節(jié)約內(nèi)存空間,SparseArray只能存儲(chǔ)key為int類型的數(shù)據(jù),同時(shí),SparseArray在存儲(chǔ)和讀取數(shù)據(jù)時(shí)候,使用的是二分查找法
//創(chuàng)建一個(gè)存儲(chǔ)String值得SparseArray
SparseArray<String> sparseArray = new SparseArray<String>();
//存儲(chǔ) 注意key是int類型
sparseArray.put(1, "zhangsan");
sparseArray.put(2, "123456");
//通過int類型的key獲取value
sparseArray.get(1);
//第二個(gè)參數(shù)是默認(rèn)值
sparseArray.put(2, "000000");
//獲取索引處的key與value
sparseArray.keyAt(1);
sparseArray.valueAt(1);
2.ArrayMap 和 SimpleArrayMap —— 替代HashMap
其中,ArrayMap 是 Map的子類,而SimpleArrayMap 不是。
//創(chuàng)建一個(gè)ArrayMap key和value都是String類型 可以是任意類型
ArrayMap<String, String> arrayMap = new ArrayMap<>();
//存
arrayMap.put("username", "zhangsan");
arrayMap.put("password", "123456");
//取
arrayMap.get("username");
arrayMap.get("password");
總結(jié)說明:
(1)如果key的類型是int、long或者boolean類型,那么使用SparseArray,因?yàn)樗苊饬俗詣?dòng)裝箱的過程;
(2)如果key類型為其它的類型,則使用ArrayMap;
(3)兩個(gè)數(shù)據(jù)結(jié)構(gòu)都適合數(shù)據(jù)量不是特別大的情況。
二、API篇
1.View.isShown() 判斷視圖是否顯示,不需要再根據(jù) View.getVisibility() == View.VISIBLE來(lái)判斷是否顯示或者隱藏,但是注意
(1)View.getVisibility() == View.VISIBLE 只是對(duì)View自身的可見性進(jìn)行判斷;
(2)View.isShown() 只有它及其所有的祖先都為visible時(shí),才返回true。
2.TextUtils.isEmpty(CharSequence)方法,用于判斷字符串是否為null或"",以后再也不要寫 if(str != null && !str.equals(""))
3.TextWatcher接口,用來(lái)監(jiān)聽文本輸入框內(nèi)容的改變,這個(gè)應(yīng)該相對(duì)知道的人多一點(diǎn),因?yàn)榻?jīng)常會(huì)有這樣的需求,基本結(jié)構(gòu)如下:
TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
};
4.TextView.setError(); 這個(gè)一般用于EditText中,驗(yàn)證用戶輸入,然后給予提示,這樣就不需要使用Toast或者Dialog來(lái)提示了。
5.onBackPressed(); 調(diào)用此句,相當(dāng)于點(diǎn)了一次返回按鈕。
6.runOnUiThread可以直接運(yùn)行到主線程中,一般在子線程中使用,如下:
new Thread(new Runnable() {
@Override
public void run() {
//執(zhí)行耗時(shí)操作
runOnUiThread(new Runnable() {
@Override
public void run() {
//操作主線程的UI
}
});
}
}).start();