介绍java中Pair

该文章已生成可运行项目,

介绍java中Pair

在这篇文章中,我们讨论了一个非常有用的编程概念,配对(Pair)。配对提供了一种方便方式来处理简单的键值关联,当我们想从方法返回两个值时特别有用。

在核心Java库中可以使用配对(Pair)的实现。除此之外,某些第三方库,比如Apache Commons和Vavr,已经在各自的api中公开了这个功能。

核心java配对实现

Pair类

Pair类在javafx.util 包中,类构造函数有两个参数,键及对应值:

    Pair<Integer, String> pair = new Pair<>(1, "One");
    Integer key = pair.getKey();
    String value = pair.getValue();

示例描述使用Pair类实现简单Integer到String的映射。示例中getKey方法返回key对象,getValue方法返回对应值对象。

AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntry

SimpleEntry定义在抽象类AbstractMap里面,其构造方法与Pair类似:

    AbstractMap.SimpleEntry<Integer, String> entry 
      = new AbstractMap.SimpleEntry<>(1, "one");
    Integer key = entry.getKey();
    String value = entry.getValue();

其键和值可以通过标准的getter和setter方法获得。

另外AbstractMap 类还包含一个嵌套类,表示不可变配对:SimpleImmutableEntry 类。

    AbstractMap.SimpleImmutableEntry<Integer, String> entry
      = new AbstractMap.SimpleImmutableEntry<>(1, "one");

应用方式与可变的配对一样,除了配置的值不能修改,尝试修改会抛出UnsupportedOperationException异常。

Apache Commons

在Apache Commons库中,org.apache.commons.lang3.tuple 包中提供Pair抽象类,不能被直接实例化。
其有两个子类,分别代表可变与不可变配对:ImmutablePair 和 MutablePair。两者都实现了访问key/value以及setter和getter方法:

    ImmutablePair<Integer, String> pair = new ImmutablePair<>(2, "Two");
    Integer key = pair.getKey();
    String value = pair.getValue();

尝试在ImmutablePair 执行setValue方法,会抛出UnsupportedOperationException异常。但在可变配对上执行完全正常:

    Pair<Integer, String> pair = new MutablePair<>(3, "Three");
    pair.setValue("New Three");

Vavr库

Vavr库中不可变的Tuple2类提供配对功能:

    Tuple2<Integer, String> pair = new Tuple2<>(4, "Four");
    Integer key = pair._1();
    String value = pair._2();

在这个实现中,创建对象后不能修改,所以更新方法返回改变后的新实例:

    tuplePair = pair.update2("New Four");

总结

本文讨论java配对概念,并通过实例展示了其不同的实现,核心java及第三方提供实现。

本文章已经生成可运行项目
### 介绍Java 中,`Pair` 是一种用于存储两个相关对象的数据结构,它允许将两个不同型的对象组合在一起。不同的 Java 库提供了不同的 `Pair` 实现,例如 `javafx.util.Pair` 以及一些第三方库如 Apache Commons Lang 中的 `org.apache.commons.lang3.tuple.Pair`。`Pair` 通常使用泛型来定义存储的两个对象的型,使得它可以灵活地存储各种型的组合 [^3]。 ### 使用 以下是使用 `javafx.util.Pair` 的示例: ```java import javafx.util.Pair; public class PairExample { public static Pair<String, String> phonePrefix(String var) { if (null == var) { return null; } String prefix = null; String phone = null; if (var.length() == 11) { phone = var; } else { prefix = var.substring(0, var.length() - 11); phone = var.substring(var.length() - 11); } return new Pair<>(prefix, phone); } public static void main(String[] args) { Pair<String, String> result = phonePrefix("010123456789"); if (result != null) { System.out.println("Prefix: " + result.getKey()); System.out.println("Phone: " + result.getValue()); } } } ``` 在算法中,`Pair` 也有广泛应用。例如在图形算法中存储节点和权重,在动态规划算法中存储状态和值: ```java import javafx.util.Pair; class State {} public class AlgorithmExample { public static void main(String[] args) { int node = 1; int weight = 10; Pair<Integer, Integer> nodeWeight = Pair.of(node, weight); State state = new State(); int value = 20; Pair<State, Integer> stateValue = Pair.of(state, value); } } ``` ### 优缺点 #### 优点 - **简洁性**:可以方便地将两个相关对象组合在一起,避免为简单的数据组合创建新的,使代码更简洁。 - **泛型支持**:使用泛型可以存储任意型的对象组合,具有很高的灵活性。 - **应用广泛**:在算法和数据处理中,经常需要将两个相关的数据关联起来,`Pair` 提供了一种简单有效的解决方案 [^1]。 #### 缺点 - **语义不明确**:`Pair` 只是简单地将两个对象组合在一起,没有明确的业务语义,代码的可读性和可维护性可能受到影响。 - **功能有限**:`Pair` 仅提供了基本的存储和访问两个对象的功能,不支持更复杂的数据操作和行为。 - **扩展性差**:如果需要存储三个或更多的对象,`Pair` 就无法满足需求,需要使用其他数据结构。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值