Pair 了解一下
16lz
2021-01-24
介绍
Pair 的字面意思是“一对”、“一双”,瞄一眼它的源码,果不其然,里面只有两个字段 first
与 second
.
public class Pair { 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 Pair create(A a, B b) { return new Pair(a, b); }}
用法
它的使用也是非常简单的:
// 两种方式都可以创建 Pair 实例,而第二种方式内部实际上也是使用第一种方式创建Pair pair1 = new Pair(1, "111"); // 第一种方式创建Pair pair2 = Pair.create(1, 111); // 第二种方式创建Pair pair3 = Pair.create(1, 111);Log.e(TAG, pair1.first.toString()); // 1Log.e(TAG, pair1.second.toString()); // 111Log.e(TAG, pair1.second.equals("111") + ""); // trueLog.e(TAG, pair1.second.equals(111) + ""); // falseLog.e(TAG, pair1.equals(pair2) + ""); // falseLog.e(TAG, pair2.equals(pair3) + ""); // true
从以上示例可知:
- Pair 的 first 获取的是第一个位置的数据,second 获取的是第二个位置的数据;
- Pair 的 equals 比较的是 first 与 second 值是否同时 equals .
说到 equals
, 上面的源码只是 android.util 包下 Pair 类的 equals 方法,由于 android.support.v4.util 包下也有 Pair 类,通过比较,两个包下的 Pair 类只有 equals 方法有所不同,其它方法无异。
// 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 方法:
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 类。
使用场景
在既要以键值对的方式存储数据列表,同时在输出时保持顺序的情况下,我们可以使用 Pair 搭配 ArrayList 实现。
场景一:
假如我们需要生成 n 个按钮,而每个按钮都有 code 值、展示文本内容的 content 值,当我们点击其中一个按钮后就根据 code 值去做指定的事情(如网络请求)。
ArrayList> dataList = new ArrayList();
场景二:
记录推送过来的消息,我们可以用 Pair 的 first 记录消息到达的时间戳,second 记录消息体。
ArrayList> dataList = new ArrayList();
更多相关文章
- Android(安卓)标题栏上加一个返回按钮 超简单的返回
- 【Android笔记】Android统计文件夹大小,删除文件夹下的所有文件方
- Activity缺少无参默认构造方法,产生实例化错误InstantiationExcep
- Android(安卓)Frament中add,repalce,hide,show用法
- Android开发常见异常和解决方案(二)
- 关于android WebViewClient的方法解释
- Android(安卓)滚动事件 OnScrollListener
- Android(安卓)HorizontalScrollView嵌套CustomView
- Android(安卓)自定义View onDraw方法详解