考虑Java中的Pair类

背景 – (background)

如果您只需要Key和Value的数据,您会用什么来实现它呢?在Java中,使用Map是没有问题的,但并不是一种很智能的方式。
在Java SE中并没有实现Pair(并非完全没有,但并不为人所知),所以我查阅了一些开源软件。

抽象地图SimpleEntry

实际上,从1.6版本开始,已经提供了一个用于Pair的标准API。这个API的实现是Entry。听起来名称有点拗口。

创建实例

新的AbstractMap.SimpleEntry(key, value)

获取键值对

Key 通过使用 getKey() 方法获取,而 Value 通过 getValue() 方法获得。

数值的改变

只能使用 setValue 方法来修改 Value。

準備好考試

AbstractMap中还有一个名为SimpleImmutableEntry的类。使用这个类,我们可以处理无法更改的元素,这样就可以实质上禁用setValue方法。当调用setValue方法时,会引发UnsupportedOperationException异常。这个实现对您来说是否有用呢?

关于名字太长的问题,只要按照下面的方式进行处理,就可以解决。

 public class Pair<K, V> extends AbstractMap.SimpleEntry<K, V> {
    /** serialVersionUID. */
    private static final long serialVersionUID = 6411527075103472113L;

    public Pair(final K key, final V value) {
        super(key, value);
    }
 }

测试代码

    1. 对偶 (AbstractMap.SimpleEntry)

 

    不可变对偶 (AbstractMap.SimpleImmutableEntry)

javafx.util.Pair 的中文翻译为 javafx.util.对。

这是JavaFX 2.0及更高版本中包含的Pair类的实现。它几乎可以像上述的SimpleEntry类一样使用。但是它不能交换值。

测试代码

成对

配对(Eclipse Collections)

Eclipse Collections是去年的圣诞礼物。当你想要在Key和Value中使用不同的类型时,请使用此方法。通过swap方法可以有趣地交换Key和Value。

创建实例

Tuples.pair(key, value) 可以用中文翻译为「元组.成对(键,值)」。

获取键值对的值

Key 是通过 getOne() 获取的,而 Value 则是通过 getTwo() 获取的。

修改值

没有该方法存在。调用错误不会引发异常。

另外,存在着一个名为put的方法。它不是用于设置Pair的值,而是将Pair所拥有的键(Key)和值(Value)放入传递的Map参数中的方法。如果传递的Map是不可修改的(unmodifiable),将会引发异常。

另外

可以使用swap方法获取通过交换键和值后的Pair。

测试代码

配对(Eclipse Collections)

双胞胎(Eclipse集合)

如果键和值具有相同的类型,则使用此选项。

创建实例

元组.双(key, value)

获取键值对

键是通过getOne()获取的,值是通过getTwo()获取的。

改动值

没有,实际上根本不存在该方法。调用错误也不会导致出现异常。

注意,尽管存在put方法,但该方法并不是为Twin设置值,而是将Twin的键和值放入传递的Map参数中的方法。如果传递的Map是不可修改的,则会引发异常。

除此之外

您可以使用swap方法获取将键(key)和值(value)交换的Twin。

测试代码

双胞胎

org.apache.commons.lang3.tuple.Pair 翻译为中文为:组织.apache.commons.lang3.tuple.Pair

Apache Commons Collections 提供了这些功能。可以使用工厂方法创建实例,可以选择可变或不可变对象,还可以选择不同的值提取方式,非常细致地设计了这些特性。

创建实例

    1. 公对包含键值对的一对对象进行配对

 

    可变公对包含键值对的一对对象进行配对

获取键值对的值

键可以是getKey()或者getLeft(),值可以是getValue()或者getRight(),都可以。

数值的更改

MutablePair可以通过setValue()方法仅修改值。

无法更改的Pair或ImmutablePair,当调用setValue()方法时会引发UnsupportedOperationException异常。

考试代码

    1. 不可变的配对

 

    可变的配对

比较表可以通过以下方式进行概括。

実装インスタンス作成変更値の取り出しAbstractMap.SimpleEntrynew○getValueAbstractMap.SimpleImmutableEntrynew×getValuejavafx.util.Pairnew×getValueEclipse Collections PairTuples.pair×getTwoEclipse Collections TwinTuples.twin×getTwoApache Commons Collections MutablePairof○getValue/getRightApache Commons Collections ImmutablePairof×getValue/getRight

总结

如果没有使用开源软件的申请程序繁琐等理由,可以考虑使用Eclipse Collections 或者 Apache Collections。

链接

GitHub代码库(pair_verification)。

广告
将在 10 秒后关闭
bannerAds