Pair的基本概念

概述

当一个方法需返回两个值、并且两个值都有重要意义时,我们一般会用Map的key、value来表达。
但是如果仅返回两个值,就用管理一堆key/value键值对的HashMap等结构,有点大材小用,增加了数据结构的复杂度。所以便出现了pair这个结构来表达这种情况
还有一种情况是:当key和value都保存具体信息时,便需要使用Pair

Pair是一个抽象类,这个类是定义基本API的抽象实现,它指的是左右两个元素,它也实现了Map.Entry接口,也就是key是左元素,value是右元素;

构造方法

配对(Pair)。配对提供了一种方便方式来处理简单的键值关联,当我们想从方法返回两个值时特别有用。

  • Apache Commons Lang:
    • 定义在 org.apache.commons.lang3.tuple.Pair 包中。
    • 需要引入 Apache Commons Lang 库作为依赖。
  • JavaFX:
    • 定义在 javafx.util.Pair 包中。
    • 需要引入 JavaFX SDK,且不再包含在 JDK 中(从 JDK 11 开始不再包含在 JDK 的标准库中)

由于Pair 类在 JDK 11 开始便不可用,所以下面将使用 Apache Commons Lang 的 Pair来做说明和介绍
实例化:实例化时可以使用MutablePair(可变二元组)和ImmutablePair(不可变二元组),一个可变,一个不可变

  • 在不可变元组中,存储值的属性均被final修饰,因而不可变。
Pair<Integer, String> pair = new MutablePair<>(3, "Three");
pair.setValue("New Three");// 如果去set的话,程序运行便会报错
ImmutablePair<Integer, String> pair = new ImmutablePair<>(2, "Two");
Integer key = pair.getKey();
String value = pair.getValue();// 方式2
Pair<Integer,String> pair = Pair.of(1,"2");
System.out.println(pair.getKey());//1
System.out.println(pair.getValue());//"2"
System.out.println(pair.getLeft());//1
System.out.println(pair.getRight());//"2"

和Map的区别

  • 数据结构
    • Pair: 存储一对相关的值,通常用于表示两个元素之间的关系。每个pair 可以存储两个值。这两种值的类型没有限制,也可以将自己写的类放进去。
      • 适合用于简单的键值对场景,尤其是当只需要存储两个值时
    • Map: 存储多个键值对,允许通过键快速访问对应的值。
      • 适合用于需要存储和查找多个元素的场景
  • 元素数量
    • Pair: 只能存储两个元素(左值和右值)
      • 适合表示简单的关系,如坐标点、键值对等。
    • Map: 可以存储任意数量的键值对。
      • 适合表示更复杂的数据结构,如字典、配置项等。
  • 访问方式
    • Pair:通过 getLeft() 和 getRight() 方法访问元素。
      Pair<Integer, String> myPair = Pair.of(1, "Hello");
      System.out.println(myPair.getLeft());  // 输出 1
      System.out.println(myPair.getRight()); // 输出 Hello
      
    • Map:通过键访问对应的值,使用 get(key) 方法。
  • 键的唯一性
    • Pair: 不涉及键的概念,只有两个值,没有唯一性的问题
    • Map: 每个键必须是唯一的,不能重复。如果插入相同的键,后插入的值会覆盖之前的值。
  • 使用场景
    • Pair: 适合用于简单的场景,如返回两个相关的值、表示坐标等。
    • Map: 适合用于需要存储和查找多个元素的场景,如配置项、字典、频率统计等。

实现原理

org.apache.commons.lang3.tuple下面的Pair:Pair是一个抽象类,这个类是定义基本API的抽象实现,它指的是左右两个元素,它也实现了Map.Entry接口,也就是key是左元素,value是右元素

  • 子类实现的是可能是可变的也可能是不可变的,然而对存储的对象类型是没有限制的,如果可变的对象存储在Pair中,那么Pair对象也会变为可变的;
  • 关系如下
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452565.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG流程的实现与改进

一、 RAG流程图 数据入库&#xff1a;读取本地数据并切成小块&#xff0c;并把这些小块经过编码embedding后&#xff0c;存储在一个向量数据库中&#xff08;下图1——6步&#xff09;&#xff1b;相关性检索&#xff1a;用户提出问题&#xff0c;问题经过编码&#xff0c;再在…

探索Python中的多线程与多进程

在Python编程中&#xff0c;多线程和多进程是两个重要的概念&#xff0c;它们被用来提高程序的执行效率。本文将深入探讨这两个概念&#xff0c;并对比它们在Python中的实现方式。 一、多线程 多线程是一种并发执行的程序设计方法。在Python中&#xff0c;我们可以使用thread…

【C++_string类练习】仅仅反转字母

题目链接&#xff1a;仅仅反转字母 解题思路&#xff1a; 这种反转字符的题目我第一个想到的方法就是&#xff1a;双指针 一个指针在前start&#xff0c;一个指针在后back&#xff0c; 如果指针所指向的位置的值是字母&#xff0c;那么两个指针位置的值就进行交换&#xff0…

Leetcode 反转字符串中的单词

这个Java代码解决了“反转字符串中的单词顺序”的问题&#xff0c;具体思想如下&#xff1a; 1. 去除字符串首尾的空格 s.trim() 方法用于去除输入字符串 s 中的前导和尾随空格。这样做是为了防止在后续步骤中多余的空格对结果产生影响。 2. 按空格分割字符串 s.split(&quo…

Ingress-nginx中HTTPS的强制转发

文章目录 在使用aws 的NLB转发流量到ingress时&#xff0c;发现NLP上生成的转发配置不符合正常预期&#xff0c;如下图&#xff1a; ingress-nginx service 配置如下&#xff1a; apiVersion: v1 kind: Service metadata:annotations:service.beta.kubernetes.io/aws-load-b…

智能去毛刺:2D视觉引导机器人如何重塑制造业未来

机器人技术已经深入到各个工业领域中&#xff0c;为制造业带来了前所未有的变革。其中&#xff0c;2D视觉引导机器人技术以其精准、高效的特点&#xff0c;在去毛刺工艺中发挥着越来越重要的作用。本文将为您介绍2D视觉引导机器人技术的基本原理及其在去毛刺工艺中的应用&#…

Node.js学习笔记

回顾&#xff1a; javascript 可以在浏览器运行 &#xff08;js代码会JavaScript的解析引擎执行&#xff09;chrome 》V8 &#xff08;性能最好&#xff09;FireFox 》 奥丁猴safri 》JSCoreIE浏览器 》查克拉JavaScript可以在浏览器端操作DOM 和BOM每一个浏览器都内置了B…

php生成PDF文件(FPDF)

FPDF即“Free PDF”&#xff0c;FPDF类库提供了基本的PDF创建功能&#xff0c;其源代码和使用权是免费的。 PDF格式文档优势 通用&#xff1a;PDF文档在UNIX和Windows系统均可正常使用。 安全&#xff1a;PDF文档可设置为只读模式&#xff0c;并且可以添加密码等保护措施。 美…

JavaScript:闭包、防抖与节流

一&#xff0c;闭包 1&#xff0c;什么是闭包 闭包是指一个函数和其周围的词法环境(lexical environment)的组合。 换句话说&#xff0c;闭包允许一个函数访问并操作函数外部的变量。 闭包的核心特性: 函数内部可以访问外部函数的变量即使外部函数已经返回&#xff0c;内部…

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08;…

在wsl2下将Ubuntu从一个盘移动到其他盘

参考文章&#xff1a; wsl下将Ubuntu从c盘移动到其他盘 WSL数据迁移(迁移ext4.vhdx) WSL 系统迁移&#xff08;2&#xff09;&#xff0c;导入虚拟机磁盘映像 .vhdx ext4/fs WSL2迁移后默认登陆用户为root的解决方案 操作过程&#xff1a; 1.查看当前系统中wsl分发版本 …

系统托盘图标+快捷启动(Python)

QkStart 我把这个程序命名为QkStart 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name QkStart |User Pfolg # 2024/10/19 22:06 import threading import time import pystray from PIL import Image from pystray import MenuItem, Menu import o…

【网络安全】缓存欺骗问题之查看个人资料接口

未经许可,不得转载。 文章目录 正文正文 目标网站 target.com,查看个人资料页面时,API 端点为/get_user,完整的 URL 是 https://target.com/web-api/v1/get_user?timestamp=123456(其中 timestamp 是一个易受攻击的参数)。 我注意到响应中有一个 cf-cache-status= MISS…

【ESP32-IDFV5.3.1开发】带SSL的MQTT-demo连接教程

目录 1.VSCODE以及IDF环境配置(略) 2.准备demo 2.1打开VSCODE&#xff0c;主菜单创建示例 找到SSL对应demo&#xff0c;点击创建&#xff0c;并成功创建项目&#xff0c;点击编译&#xff0c;显示编译成功即可以下一步。 确认该demo支持的开发板是你手上的开发板 3.修改demo配…

了解EasyNVR及EasyNVS,EasyNVR连接EasyNVS显示授权超时如何解决?什么原因?

我们先来了解NVR批量管理软件/平台EasyNVR&#xff0c;它深耕市场多年&#xff0c;为用户提供多种协议&#xff0c;兼容多种厂商设备&#xff0c;包括但不限于支持海康&#xff0c;大华&#xff0c;宇视&#xff0c;萤石&#xff0c;天地伟业&#xff0c;华为设备。 NVR录像机…

基于模型设计的智能平衡移动机器人-基础实验SPI

目录 SPI介绍 模型搭建 SPI介绍 SPI即Serial Peripheral Interface是高速同步串行输入/输出端口。SPI目前被广泛用于外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部芯片的扩展。与前文介绍的SCI最大的区别是,SPI是同步串行接口。 SPI接口的通信原理简单&#…

(五)若使用LQR控制小车倒立摆,该如何对小车和摆杆的动力学方程线性化?哪些变量是可以进行简化的,线性化后的状态空间方程应该怎么列写

写在前面&#xff1a; 关于lqr控制的讲解&#xff0c;可以观看如下三个视频&#xff1a; 2. LQR数学公式理解_哔哩哔哩_bilibili 如何感性地理解LQR控制&#xff1f;_哔哩哔哩_bilibili LQR简介与使用_哔哩哔哩_bilibili 正文&#xff1a; 在之前系列的文章中我们已经得出…

WGCLOUD使用手册 - 文件防篡改监测

WGCLOUD作为一款运维平台&#xff0c;天然具备了文件防篡改监测能力&#xff0c;也可以监测文件夹 如果发现文件或者文件夹下的文件&#xff0c;被修改&#xff0c;被删除&#xff0c;被添加等操作&#xff0c;会立刻发送告警通知 如果设置了自动恢复指令&#xff0c;也会立刻…