官方文档:https://developer.android.com/reference/android/util/Pair.html
原文地址:
http://blog.csdn.net/qq_24889075/article/details/52152447
http://www.jianshu.com/p/a79ecd711a7c

机缘巧合看见了Pair这个类,网上介绍不多(可能是因为太简单了吧) 于是自己看了下源码。特此记录

在android.util包中有这么一个类,他特别像小时候吃的双棒冰棍(暴露年龄了),他叫Pair

Android学习之Pair类 (android.util.Pair )_第1张图片

首先看测试代码

Pair pair = new Pair(1, 2);//第一种创建方式 Log.e("aa", pair.first.toString()); Log.e("aa", pair.second.toString()); Log.e("aa", pair.equals("1") + ""); Log.e("aa", pair.equals(1) + ""); Log.e("aa", "------------------------"); Pair pair2 = Pair.create("1", 2);//第二种创建方式 Log.e("aa", pair2.first.equals("1") + ""); Log.e("aa", pair2.first.equals(1) + ""); Log.e("aa", pair.equals(1) + "");  Log.e("aa", "------------------------"); Log.e("aa", pair.equals(pair2) + ""); Log.e("aa", pair.equals(pair) + "");

打印的Log

Android学习之Pair类 (android.util.Pair )_第2张图片

Pair 的 first是获取第一个位置的数据,second是获取第二个位置的数据。
equals是要重点说一下,看源码:

//android.util下的源码 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下的源码 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));    }

根据源码和上面打印的Log可以看出对比的是Pair对象内容,要注意的是这个equals不是java.lang包下的equals
Pair也可以添加泛型,比如:

Pair<Boolean, String> pair;Pair<Integer, Double> pair2;Pair<Character, Float> pair3;

是的,不能添加Java的八大类型


挺好玩的一个类,适当使用能省不少事,使用场景自己脑补 (^o^)/。

原文地址:
http://blog.csdn.net/qq_24889075/article/details/52152447
http://www.jianshu.com/p/a79ecd711a7c

更多相关文章

  1. OpenGL ES教程III之移动变换(原文对照)
  2. android 在线升级借助开源中国App源码
  3. 关于android 天气预报的源码
  4. 在 Android 系统源码中自定义系统服务(Custom System Service in
  5. 【学习Android】Keyboard.class类源码注解
  6. Android Studio第三十一期 - 记录RecyclerView滚动位置并恢复
  7. Android编译源码时出现的错误: “_FORTIFY_SOURCE”重定义
  8. Android 4.0 Launcher2源码分析——启动过程分析

随机推荐

  1. 【Linux】CentOS7上解压zip需要安装uzip
  2. libpcap丢包原理分析及Fedora 9 内核2.6.
  3. linux下启动、关闭oracle服务
  4. 如何在虚拟机中安装kali linux
  5. CentOS 7下配置IP地址
  6. 心中的完美的E680I[文字]
  7. zynq PS侧DMA驱动
  8. 清华大学出版社“抄袭事件”回放
  9. shell编程与应用自测题(出自linux面试题)
  10. linux socket 程序被ctrl+c或者异常终止,