集合中的对象在传输中变成了LinkedHashMap解决方案

简介: 集合中的对象在传输中变成了LinkedHashMap解决方案

1、在了解为什么集合中的对象在传输中变成了LinkedHashMap之前,我们先来了解下什么是LinkedHashMap

LinkedHashMap是Java的一种数据结构,它继承自HashMap。HashMap是一种基于哈希表的Map接口的实现类,而LinkedHashMap在HashMap的基础上,增加了一条双向链表来维护元素的插入顺序或访问顺序。

具体来说,当我们向LinkedHashMap中添加元素时,如果该元素已存在,新元素将替换旧元素,并被添加到链表的尾部。当遍历或访问LinkedHashMap中的元素时,它们会按照访问顺序(或插入顺序)进行排列。另外,LinkedHashMap也支持插入null键和null值。

这种特性使LinkedHashMap在一些特定场景下非常有用,例如缓存。对于缓存应用来说,数据的读取速度是非常重要的,而LinkedHashMap由于能够维护元素的访问顺序,因此相比于HashMap,它可以提供更快的读取速度。

2、为什么集合中的对象在传输中变成了LinkedHashMap

在Java中,集合对象在传输过程中变成LinkedHashMap的原因与Java集合的实现机制有关。当我们传递一个集合对象到另一个方法时,如果这个方法对集合进行了修改(如添加、删除或修改元素),那么返回的集合类型可能会变为LinkedHashMap。

这是因为LinkedHashMap是HashMap和LinkedList的结合体,它既实现了基于哈希表的数据存取,又通过维护一条贯穿其全部Entry的双向链表来保证元素的插入顺序或者访问顺序。所以,如果在传输过程中修改了集合的内容,由于这种修改可能会影响到元素的存储位置和顺序,因此有可能会选择使用性能更优的LinkedHashMap作为返回的集合类型。

此外,值得注意的是,这并非一定会发生,具体是否会变成LinkedHashMap还取决于具体的使用场景和代码实现。

3、为什么集合中的对象在传输中变成了LinkedHashMap

集合中的对象在传输过程中变成LinkedHashMap,这种现象可能发生在http传输或者远程调用返回类型为List时。原因可能是由于序列化和反序列化过程导致。解决这类问题,通常需要将LinkedHashMap再转换回原来的对象。

以下是一些可能的解决方案:

  1. 使用fasterxml的Jackson库来进行对象的转换。Jackson库提供了一种方式可以把LinkedHashMap转回原来的对象。
  2. 在进行远程调用的情况下,如果返回类型是DataResults,并且遇到了java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Users的问题,可以写一个通用转换类来解决这个问题。
  3. 确保序列化和反序列化的过程是可互操作的。即在发送端和接收端使用的是同一种序列化和反序列化的方式。
  4. 尽量避免在类中使用静态变量和transient关键字,这些因素可能会影响序列化和反序列化的过程。
  5. 通过ObjectMapper将集合转换为新的类型,如下:
List<AddSignVo> resultList = (ArrayList<AddSignVo>)result.get("data");
 // 将LinkedHashMap 转化为 对象的集合
 ObjectMapper objectMapper=new ObjectMapper();
 List<AddSignVo> list = objectMapper.convertValue(resultList, new TypeReference<List<AddSignVo>>(){});


相关文章
|
IDE Java 开发工具
@Builder这个注解的作用
@Builder这个注解的作用
491 0
|
XML NoSQL Java
Redis - 一篇走心的 RedisUtil 工具类
Redis - 一篇走心的 RedisUtil 工具类
3861 0
Redis - 一篇走心的 RedisUtil 工具类
|
JSON 前端开发 fastjson
成功解决:java.util.LinkedHashMap cannot be cast to com.zyz.bookshopmanage.pojo.GoodsInfo
这篇文章讲述了在Java后端开发中遇到的类型转换错误,即无法将`java.util.LinkedHashMap`转换为`com.zyz.bookshopmanage.pojo.GoodsInfo`对象的问题。文章提供了解决这个问题的两种方法:一是将对象转换为JSON字符串再反序列化为对象,二是通过在项目的pom文件中引入fastjson库来简化转换过程。最后,文章展示了成功转换对象的代码示例。
成功解决:java.util.LinkedHashMap cannot be cast to com.zyz.bookshopmanage.pojo.GoodsInfo
|
Java 应用服务中间件 Shell
tomcat启动报错 java.util.zip.ZipException: invalid CEN header (bad signature)
war包部署到tomcat里,启动时报错: Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.
14316 0
|
10月前
|
存储 JSON fastjson
再也不用心惊胆战地使用FastJSON了——序列化篇
本篇将主要介绍json序列化的详细流程。本文阅读的FastJSON源码版本为2.0.31。
3449 49
|
XML Java Maven
MockedStatic 用于模拟静态方法
`MockedStatic` 是 Mockito 3.4.0 版本引入的一个功能,用于模拟静态方法。在之前的 Mockito 版本中,模拟静态方法是一项困难的任务,通常需要借助其他工具如 PowerMockito。但是,从 Mockito 3.4.0 开始,你可以使用 `MockedStatic` 类轻松地模拟静态方法。 以下是如何使用 `MockedStatic` 模拟静态方法的示例: 1. 首先,确保你已经添加了 Mockito 的依赖项。对于 Maven 项目,添加以下依赖项: ```xml <dependency> <groupId>org.mockito</groupId
2720 9
|
Java
《Java工程师成神之路》电子版
《Java工程师成神之路(基础篇)》介绍了普通Java工程师必须要学习的相关知识点,包括面向对象和Java语言基础两大部分,涵盖基本数据类型、关键字、异常、I/O流、集合、反射、泛型和枚举......
581 0
 《Java工程师成神之路》电子版
|
缓存 NoSQL Java
Springboot整合缓存
Springboot整合缓存
438 0
Springboot整合缓存
|
Java 数据库连接 数据库

热门文章

最新文章