有序键值的一种:Pair

作者: 料峭寒 | 来源:发表于2016-12-01 11:44 被阅读831次

在某些情况下,既需要已键值的方式存储数据列表,还需要在输出的时候保持顺序。HashMap满足前者,ArrayList则满足后者,再不打算去多做修改且数据类型相对简单时,可以选择Android提供的一种工具类:Pair(搭配ArrayList)。

1. Pair 实例

Pair生成实例的方式有两种:

Pair pair = new Pair(1, "3");

or

Pair pair = Pair.create("1", 3);

实际上方式二在内部的实现只是对方式一的调用:

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

同时可以看出,Pair接收的数据类型是两个泛型,因此可以传入自定义的实体类。

2. 如何取值

Pair内部数据的存储如下:

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

仅仅使用了两个public的变量,因此在取值时可以直接取用。

int key = pair.first;
String value = pair.second;
3. 关于比较

无论是ArrayList还是HashMap,凡是列表都会涉及到比较某元素是否已存在的情况。而Pair在内部实现equals方式是通过两个值的比较结果得出结果,这里涉及到一个问题:android.util.Pair与android.support.v4.util.Pair。
v4的Pair与常规Pair间的区别只在比较处,查看源码如下:

  • android.util.Pair
@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);
}
  • android.support.v4.Pair
@Override
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));
}

唯一不同的是调用最终的比较方法,v4采用自己写的一个方法,而常规Pair则使用Objects类的equals方法,而Objects的equals方法实际上内部就是v4的objectsEqual使用的逻辑,那么为什么会有这个差别呢?
Objects这个类是Java7才有的类,而Android是从4.4KitKat开始支持JDK7编译,因此为了保证4.4之前的版本不会有空指针问题(4.4前的常规Pair),在v4中加入了一个不依赖JDK7的独立类。

关于Pair这个类,相对简单,却也恰到好处。

相关文章

  • 有序键值的一种:Pair

    在某些情况下,既需要已键值的方式存储数据列表,还需要在输出的时候保持顺序。HashMap满足前者,ArrayLis...

  • Android 基础2:Pair 和 ArrayList(Has

    有时候使用ArrayList的有序功能和HashMap的键值对功能,可以采取ArrayList和Pair搭配使用。...

  • 聊聊Redis键值存储结构以及Rehash机制

    一、键值对的结构 了解 Redis 朋友的都知道,Redis 是一种键值对 ( Key-Value Pair ) ...

  • 写给小白的pySpark入门

    1. 创建键值对RDD ( Pair RDD) RDD中可以包含任何类型的对象。其中,键值对是一种比较常见的RDD...

  • Redis 基础

    存储key-value pair 添加键值对SET 读取键值对GET 键...

  • Go map

    哈希表 map又称为哈希表,是一种无序的键值对(key-value pair)的集合。 map也是一种集合,因此可...

  • 第四章 键值对操作

    4.1 动机 Spark为包含键值对类型的RDD提供了一些专有的操作——pair RDD。pair RDD是很多程...

  • spark 基本概念

    2019-02-27 Pair RDD键值RDD对一个普通RDD可以通过map函数转换成pair RDDpair RDD

  • redis dict

    字典其实跟我们java 中的hashmap 是一样的道理,一种用于保存键值对(key-value pair)的抽象...

  • Swift学习笔记-字典

    字典是一种无序的容器类型,其中的元素为键值对(key-value pair),其中键类型必须是可散列的,swift...

网友评论

    本文标题:有序键值的一种:Pair

    本文链接:https://www.haomeiwen.com/subject/ihsxmttx.html