Pair 瞭解一下

介紹

Pair 的字面意思是「一對」、「一雙」,瞄一眼它的源碼,果不其然,裏面只有兩個字段 firstsecond .android

public class Pair<F, S> {
    public final F first;
    public final S second;

    public Pair(F first, S second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof Pair)) {
            return false;
        }
        Pair<?, ?> p = (Pair<?, ?>) o;
        return Objects.equals(p.first, first) && Objects.equals(p.second, second);
    }

    // ...

    public static <A, B> Pair <A, B> create(A a, B b) {
        return new Pair<A, B>(a, b);
    }
}
複製代碼

用法

它的使用也是很是簡單的:網絡

// 兩種方式均可以建立 Pair 實例,而第二種方式內部實際上也是使用第一種方式建立
Pair pair1 = new Pair<Integer, String>(1, "111"); // 第一種方式建立
Pair pair2 = Pair.create(1, 111); // 第二種方式建立
Pair pair3 = Pair.create(1, 111);

Log.e(TAG, pair1.first.toString()); // 1
Log.e(TAG, pair1.second.toString()); // 111
Log.e(TAG, pair1.second.equals("111") + ""); // true
Log.e(TAG, pair1.second.equals(111) + ""); // false

Log.e(TAG, pair1.equals(pair2) + ""); // false
Log.e(TAG, pair2.equals(pair3) + ""); // true
複製代碼

從以上示例可知:ide

  • Pair 的 first 獲取的是第一個位置的數據,second 獲取的是第二個位置的數據;
  • Pair 的 equals 比較的是 first 與 second 值是否同時 equals .

說到 equals , 上面的源碼只是 android.util 包下 Pair 類的 equals 方法,因爲 android.support.v4.util 包下也有 Pair 類,經過比較,兩個包下的 Pair 類只有 equals 方法有所不一樣,其它方法無異。this

// android.util 包下
public boolean equals(Object o) {
    if (!(o instanceof Pair)) {
        return false;
    }
    Pair<?, ?> p = (Pair<?, ?>) o;
    return Objects.equals(p.first, first) && Objects.equals(p.second, second);
}

// android.support.v4.util 包下
public boolean equals(Object o) {
    if (!(o instanceof Pair)) {
        return false;
    } else {
        Pair<?, ?> p = (Pair)o;
        return ObjectsCompat.equals(p.first, this.first) && ObjectsCompat.equals(p.second, this.second);
    }
}
複製代碼

ObjectsCompat 類裏面的 equals 方法:spa

public static boolean equals(@Nullable Object a, @Nullable Object b) {
    if (VERSION.SDK_INT >= 19) {
        return Objects.equals(a, b);
    } else {
        return a == b || a != null && a.equals(b);
    }
}
複製代碼

Objects 是 Java7 之後纔有的類,而 Android 是從 4.4 開始支持 JDK7 編譯的,所以爲了兼容 4.4 以前的版本,在 v4 中加入了一個不依賴 JDK7 的 Pair 類。code

使用場景

既要以鍵值對的方式存儲數據列表,同時在輸出時保持順序的狀況下,咱們能夠使用 Pair 搭配 ArrayList 實現。源碼

場景一:string

假如咱們須要生成 n 個按鈕,而每一個按鈕都有 code 值、展現文本內容的 content 值,當咱們點擊其中一個按鈕後就根據 code 值去作指定的事情(如網絡請求)。it

ArrayList<Pair<String,String>> dataList = new ArrayList();
複製代碼

場景二:io

記錄推送過來的消息,咱們能夠用 Pair 的 first 記錄消息到達的時間戳,second 記錄消息體。

ArrayList<Pair<Long,Message>> dataList = new ArrayList();
複製代碼
相關文章
相關標籤/搜索