广告
返回顶部
首页 > 资讯 > 后端开发 > Python >浅析java中Pair和Map的区别
  • 691
分享到

浅析java中Pair和Map的区别

2024-04-02 19:04:59 691人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录核心java配对实现Pair类AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntryApache CommonsVa

在这篇文章中,我们讨论了一个非常有用的编程概念,配对(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抽象类,不能被直接实例化,可以通过Pair.of(L,R)实例化,提供了getLeft()和getRight()方法。


Pair<Integer, String> pair= Pair.of(2, "two");
	Integer key = pair.getKey();
	String value = pair.getValue();
	Integer key = pair.getLeft();
	String value = pair.getRight();

其有两个子类,分别代表可变与不可变配对:ImmutablePair 和 MutablePair。三者都实现了访问key/value以及setter和getter方法和getLeft()和getRight()方法:


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

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


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");

举个例子

需求:分别用Pair和Map来对value做排序并打印结果。


 // 使用Pair来排序
    JSONObject jsonObject1 = new JSONObject();
    jsonObject1.put("a", 9);
    JSONObject jsonObject2 = new JSONObject();
    jsonObject2.put("a", 4);
    JSONObject jsonObject3 = new JSONObject();
    jsonObject3.put("a", 7);
    JSONObject jsonObject4 = new JSONObject();
    jsonObject4.put("a", 8);
    ArrayList<Pair<Integer, JSONObject>> pairs = new ArrayList<>();
    pairs.add(Pair.of(1, jsonObject1));
    pairs.add(Pair.of(2, jsonObject2));
    pairs.add(Pair.of(3, jsonObject3));
    pairs.add(Pair.of(4, jsonObject4));

    List<Pair<Integer, JSONObject>> result = pairs.stream().sorted(Comparator.comparingInt(o -> o.getRight().getInteger("a"))).collect(Collectors.toList());
    result.forEach(System.out::println);

    System.out.println("==============================");
    
    // 使用map来排序
    HashMap<Integer, JSONObject> integerJSONObjectHashMap = new HashMap<>();
    integerJSONObjectHashMap.put(1, jsonObject1);
    integerJSONObjectHashMap.put(2, jsonObject2);
    integerJSONObjectHashMap.put(3, jsonObject3);
    integerJSONObjectHashMap.put(4, jsonObject4);

    List<Map.Entry<Integer, JSONObject>> result2 = integerJSONObjectHashMap.entrySet().stream().sorted(Comparator.comparingInt(o -> o.getValue().getInteger("a"))).collect(Collectors.toList());
    result2.forEach(System.out::println);

到此这篇关于浅析java中Pair和Map的区别的文章就介绍到这了,更多相关java中Pair和Map的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅析java中Pair和Map的区别

本文链接: https://www.lsjlt.com/news/122252.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅析java中Pair和Map的区别
    目录核心java配对实现Pair类AbstractMap.SimpleEntry 和 AbstractMap.SimpleImmutableEntryApache CommonsVa...
    99+
    2022-11-11
  • java中Pair和Map的区别有哪些
    这篇文章主要介绍了java中Pair和Map的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在核心Java库中可以使用配对(Pair)的实现。除此之外,某些第三方库...
    99+
    2023-06-14
  • Java泛型中<?>和<T>的区别浅析
    目录一、定义1、T 代表一种类型2、是通配符,泛指所有类型二、使用1、T 一般有两种用途2、<> 的限制用途3、三种泛型限定三、总结1、从定义上看2、从用途上看补充:场景...
    99+
    2022-12-19
    java泛型?和T的区别 java 泛型 T ? Java 泛型 ?
  • JavaScript中? ?、??=、?.和 ||的区别浅析
    目录前言 与 || 的区别空值合并操作符 可选链操作符 . 空值赋值运算符(=)补充:. 链判断运算符总结前言 undefined和null是两个比较特...
    99+
    2022-11-13
    js ?.和 ||区别 js ?.是什么意思 js 空值合并操作符
  • JS中Map、WeakMap和Object的区别解析
    目录JavaScript中的Map、WeakMap和Object都是用于存储键值对的数据结构:下面是Map、WeakMap和Object之间的区别:1. 键的类型:2. 垃圾回收:3...
    99+
    2023-05-16
    js map weakmap和object区别 js weakmap和object区别
  • 浅析git中push和commit的区别
    在Git中,push和commit是两个非常重要的术语,它们都是版本控制系统中的操作命令。但是,这两个命令之间存在一些区别。本文将会介绍Git push和commit的区别。Git Commit在Git中,commit是指将更改记录在本地存...
    99+
    2023-10-22
  • Android中WebChromeClient和WebViewClient的区别浅析
    1、WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:onLoadResource 、onPageStart 、onPageFinish ...
    99+
    2022-06-06
    Android
  • 深入浅析java项目中的Map
    本篇文章给大家分享的是有关深入浅析java项目中的Map,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Map接口Map类似y(x)=x;这样的函数(key对应x,value对应...
    99+
    2023-05-31
    java map ava
  • Spring中@Validated和@Valid区别浅析
    目录基本概念@Valid和@Validated 批注主要区别什么是嵌套验证?总结基本概念 Spring Validation 验证框架对参数的验证机制提供了@Validated(Sp...
    99+
    2022-11-13
  • 深入浅析java中TCP与UDP的区别
    深入浅析java中TCP与UDP的区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。TCP/UDP:TCP主要是面向连接的协议,它包含有建立和拆除连接,保证数据流的顺序和正...
    99+
    2023-05-31
    java tcp udp
  • 浅析Java中String与StringBuffer拼接的区别
    学习笔记:  1、String拼接会创建一个新的String对象,存储拼接后的字符串;    StringBuffer拼接是直接在本身拼接,会即时刷新。  2.String只能拼接String类型的字符串;    StringBuffer能...
    99+
    2023-05-31
    java string stringbuffer
  • 浅析Java中接口和抽象类的七大区别
    目录接口抽象类区别1:定义关键字不同区别2:继承或实现的关键字不同区别3:子类扩展的数量不同区别4:属性访问控制符不同区别5:方法控制符不同区别6:方法实现不同区别7:静态代码块使用...
    99+
    2022-11-12
  • 浅析php中==与===的区别
    在PHP中,有时候我们需要比较两个变量是否相等。为了实现这个功能,我们可以使用等于操作符“==”或者全等操作符“===”。虽然两个操作符都可以完成相等比较,但是它们之间还是存在一些差别。在本文中,我们将分别介绍“==”和“===”的具体作用...
    99+
    2023-05-14
    === == php
  • 浅谈Java中Lock和Synchronized的区别
    目录1. 从功能角度来看2. 从特性来看3. 从性能方面来看1. 从功能角度来看 Lock和Synchronized都是java中去用来解决线程安全问题的一个工具 2. 从特性来看 ...
    99+
    2022-11-13
  • Java中Stream流中map和forEach的区别详解
    目录什么是 stream 流MapforEach使用场景不是很难的知识,但是今天犯错了,记录一下 什么是 stream 流 我们在使用集合或数组对元素进行操作时往往会遇到这种情况:通...
    99+
    2022-11-13
  • 浅谈Java中static和非static的区别
    关于static和非static变量的区别 static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在。非static修饰的成员变量是在对象new出来的时候划分存...
    99+
    2023-05-31
    java static ava
  • 浅析Oracle和Mysql分页的区别
    一、Mysql使用limit分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize ...
    99+
    2022-10-18
  • 浅析Mysql和Oracle分页的区别
    目录mysql使用limit进行分页oracle使用rownum进行分页Mysql与Oracle级联查询Mysql省市区级联查询Mysql与Oracle插入数据存在修改不存在新增MySQL使用limit进行分页 sele...
    99+
    2022-12-07
    Mysql和Oracle分页区别 MysqlOracle分页
  • RxJava中map和flatMap的用法区别源码解析
    目录前言:作用使用方法:mapflatMap源码分析mapflatMap结语前言: RxJava中提供了大量的操作符,这大大提高了了我们的开发效率。其中最基本的两个变换操作符就是ma...
    99+
    2022-11-13
  • 深入浅析Java中HashMap与HashTable容器的区别
    这篇文章给大家介绍深入浅析Java中HashMap与HashTable容器的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、HashMap HashMap继承抽象类AbstractMap,实现接口Map、Clon...
    99+
    2023-05-31
    java hashmap hashtable
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作