Android 表示一對“組元素”的Pair類
一、Pair初認識
開啟詞典,輸入Pair,我們會得到這樣的解釋
解釋是:一副, 一條, 一把; 一雙, 一對。
噢噢,成雙成對羅。
什麼,你看到的解釋的是最後一行?罷了罷了,開始吧。
還是先看一下官網怎麼說吧
1、API 5 就有了,老兵啊
2、Pair<F,S>,成雙成對羅。
嚴肅的說,就是:
Pair是一個容器,作用是輕便地對兩個物件組成的元素組進行傳遞。這個物件提供了一個合理的equals()方法,如果兩個物件的first和second值相等則返回true。
二、認識API
- 1、Pair(F first, S second),一個Pair容器裡面有2個元素,他們成組存在。
- 2、Pair裡面兩個元素都是final的
- 3、Pair的equals是值比較,不是地址比較
例項化方式
Pair p1 = new Pair(18,"張三"); // 通過 建構函式 例項化物件
Pair p2 = Pair.create(20, "李四");//通過 create方法以泛型的方式 例項化物件
Pair的equals
先看Pair自己的equals原始碼
//android.util下的Pair equals
public boolean equals (Object o){
if (!(o instanceof Pair)) {
return false;
}
Pair<?, ?> p = (Pair<?, ?>) o;
return Objects.equal(p.first, first) && Objects.equal(p.second, second);
}
//這個是android.support.v4.util下的Pair equals
public boolean equals (Object o){
if (!(o instanceof Pair)) {
return false;
}
Pair<?, ?> p = (Pair<?, ?>) o;
return objectsEqual(p.first, first) && objectsEqual(p.second, second);
}
private static boolean objectsEqual (Object a, Object b){
return a == b || (a != null && a.equals(b));
}
無疑值比較。
實踐程式碼
String PAIR = "PAIR";
Pair p1 = new Pair(18, "張三"); // 通過 建構函式 例項化物件
Pair p2 = Pair.create(20, "李四");//通過 create方法 例項化物件
Pair p3 = new Pair(18, "張三"); // 通過 建構函式 例項化物件
boolean e1 = p1.equals(p2);
Log.d(PAIR, "RESULT: " + e1); // false
// Pair的 equals 不是地址比較
boolean e2 = p1.equals(p3);
Log.d(PAIR, "RESULT: " + e2); //true
// Pair的 equals 是值比較,而不是地址比較,當且僅當元素值一致時返回true
boolean e3 = p1.equals("18");
Log.d(PAIR, "RESULT: " + e3); // false
boolean e4 = p1.equals(18);
Log.d(PAIR, "RESULT: " + e4); // false
輸出:
04-21 11:20:39.161 25404-25404/? D/PAIR: RESULT: false
04-21 11:20:39.161 25404-25404/? D/PAIR: RESULT: true
04-21 11:20:39.161 25404-25404/? D/PAIR: RESULT: false
04-21 11:20:39.161 25404-25404/? D/PAIR: RESULT: false
取值
- 通過 物件.first 取出該組的第一個元素值
- 通過 物件.second 取出該組的第一個元素值
String PAIR = "PAIR";
Pair p1 = new Pair(18, "張三"); // 通過 建構函式 例項化物件
Log.d(PAIR, "取 first 資料: " + p1.first + " " + p1.first.getClass()); // 取出
Log.d(PAIR, "取 second 資料: " + p1.second + " " + p1.second.getClass()); // 取出
.
.
輸出:
04-21 11:24:12.583 27027-27027/? D/PAIR: 取 first 資料: 18 class java.lang.Integer
04-21 11:24:12.583 27027-27027/? D/PAIR: 取 second 資料: 張三 class java.lang.String
注意:Pair儲存的“對元素”都是final,一旦複製,值不可改變,所以初始化一次賦值,不可修改。
關於API的部分就說到這裡,因為實在簡單,沒有其他的特殊的了。有興趣可以檢視官方文件。
三、Pair 有什麼用
那問題就來了,Pair有什麼用呢?
特性上面已經說了,Pair就是一組元素,他們是成對存在,你可能會想那不就是鍵值對嗎,key和value嗎?
有點類似,但是他們不一樣,鍵值對的有一個關鍵的key讓我們完成比較和取value等一系列操作。
但是Pair不一樣,它就幾乎只有3個方法,1個equals,一個取first值,一個取second。
道理擺在這裡,具體怎麼用,就看我們自己發揮了。
例子
比如我們知道,List和Map這兩個集合容器是有很大不同的,但是如果在某些情況下,我們想用到List有的但是map沒有的特性,但是我們資料又有一定關聯成對出現或者說需要捆綁,那麼我們是不是利用一下Pair呢?
再具體一點,比如我們現在在做一個IM軟體,就以微信而言吧,會話列表肯定是根據最近聯絡人排序的,然後這是我們想用List實現,那麼是不是可以這樣建立一個List
List<Pair<Long, MyConversation>> sortList = new ArrayList<Pair<Long, MyConversation>>();
像這樣,first我們儲存時間戳,second我們儲存比如名為MyConversation這個實體,那我們是不是就可以在得到資料後利用first進行排序了呢,肯定可以的。
當然了,你要是說我可以在MyConversation新增一個時間戳的欄位的,那這樣沒辦法好好聊天了,我們這裡是為了示例,而且如果用Pair還可以省去實體的一個欄位,避免打破原有結構。
用處
個人認為有以下情況:
- 1、利用Pair和既有資料組成 組元素,不破壞原有結構的同時讓兩個資料產生繫結關係。
- 2、利用Pair和List結合,形成類似Map的效果。
其他的,就看我們開發所需了。
本篇完。
相關文章
- pairAI
- Java 正規表示式捕獲組分類Java
- 一次弄懂CSS的偽類和偽元素CSS
- D - Square PairAI
- .NET CORE AUTOMAPPER 對映一個類的子類APP
- 對正規表示式的一些記錄
- 對於button元素的理解
- CSS中一些利用偽類、偽元素和相鄰元素選擇器的技巧CSS
- Appium Android 獲取WebView元素的方法APPAndroidWebView
- Lua中pair和ipair的區別AI
- 偽類與偽元素的區別
- 偽類和偽元素
- CSS偽元素詳解以及偽元素與偽類的區別CSS
- 一次Android動畫工具類的封裝Android動畫封裝
- Android 擼一個快取工具類Android快取
- C++ 一元謂詞對應的lambda表示式C++
- Collections工具類,可以使用collections工具類對程式碼中的list進行分組
- Android:藍芽實現一對一聊天Android藍芽
- python如何訪問元組中的元素Python
- 正規表示式教程之匹配一組字元詳解字元
- 偽元素和偽類的區別總結
- css3 中的偽類和偽元素CSSS3
- HTML元素的分類,特性以及相互轉換HTML
- 對一個元素設定浮動後,它的特徵是什麼?特徵
- python元組有哪些獲取元素的方法Python
- 【kubernetes】網路虛擬網路卡對veth pair、flannel網路模型實現原理AI模型
- 我的工具類分組
- Python_類的組合Python
- 06-偽類和偽元素
- Java 的各種內部類、Lambda表示式Java
- 對 Android SDK 開發的一些個人心得Android
- 對於一些純資料載入類的模組,應該如何判斷測試結果?
- 一次內聯元素錯位引發對line-height的思考
- Android工具類庫Android
- Codeforces Global Round 19 E. Best PairAI
- 在Android Studio中使用Lambda表示式Android
- android 將字串轉成算術表示式Android字串
- Android5.0Activity的轉場動畫和共享元素Android動畫
- CSS3偽類和偽元素CSSS3