前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么我的数据不按顺序排序原来如此 | Java Debug 笔记

为什么我的数据不按顺序排序原来如此 | Java Debug 笔记

原创
作者头像
啵啵肠
发布于 2023-11-29 03:49:06
发布于 2023-11-29 03:49:06
3480
举报

我的接口返回的数据顺序总是不固定

问题描述

====

  • 我在开发突发奇想。将表头信息也给查出来一并返回给前端了。但是正因为这一举动却带来嘲讽。说我的接口顺序不对

问题定位

====

  • 首先说明下这个问题是刚入行时遇到的。当时很是困惑,当然啦现在看来真的是贻笑大方了。
  • 刚入行那会一直都是使用Mybatis 框架实现数据的获取的。突然接到一个需求是要求将数据列按照一定顺序返回。前端直接按照我返回的顺序进行渲染。
  • 刚接到需求觉得很简单,将数据依次写入就行了。关于具体需求我们就不深究了。下面梳理下当时发现问题及解决的一个过程吧。
  • 上面是自己写的一个列子。结果很明显我们写入的顺序是adbce 但是显示出来的顺序缺失abcde
  • 后来网上翻阅了一下资料说HashMap 是不会按照写入顺序排序的。HashMap 的key的排序是按照key的hash值进行排序的
  • 最近翻看了下HashMap的源码了解了其内部的元素存储原理才明白这个道理。此时才知其所以然。

问题分析

====

  • 下面我们向HashMap 中添加如下元素 。
  • 然后当我们map进行输出的时候是先横向遍历。当遇到有纵向数据是在纵向遍历。最终输出的顺序就是0、16、1、17、18、8

问题解决

====

  • 后来我看了下具体的Map的实现类,突然看到一个LinkedHashMap , 当时不知道是个啥玩意但是看名字感觉像是HashMap的升级版而且是链式的。感觉有点排序的感觉
  • 当时为了解决问题就决定尝试一把。
  • 结果是完美的。bug解决收工回家。对应刚入行的我还是很有成就感的。时隔多年现在又重新收拾了下自己的bug。 决定一探究竟为什么LinkedHashMap 可以实现按照写入顺序排序。
  • 通过结构图我们清楚看到他是HashMap的子类。所以他的存储结构和HashMap基本上是一样的。因为这里是Bug解析所以关于LinkedHashMap源码的东西我就不深入研究了。最终我追踪到了是其内部linkNodeLast这个方法使其具有写入顺序的特性。
  • 在每次通过HashMap put进数据之后会将当前添加进来的数据和上次添加的node进行链表关联。这样就使其都在一条链上
  • 我们上面添加的数据最终其内部一个结构图如下
  • 当然内部会有一个默认的节点作为头结点。

总结

==

  • 对待技术我们要持有严谨的态度。因为代码是死的。但是人是活的,在设计代码的时候开发者肯定会考虑到尽可能多的情况。
  • 我们使用java就是站在巨人的肩膀上。我们只有理解其内部原理才能用的得心应手。
  • 我们下回再见

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
J2EE前后台传值带中文时乱码
(本文年代久远,请谨慎阅读)传值乱码问题在Web开发中涉及许多方面:登陆注册时,是否正确得到正确的中文用户名;修改信息时,是否可以显示提交的中文信息;
ZONGLYN
2019/08/08
1.4K0
java出现中文乱码_Java开发中中文乱码总结
jsp中form表单的ation=”XxxServlet”,method=”Post”时,提交表单后往往发现中文的属性值在Servlet中获取后变乱码。
全栈程序员站长
2022/09/08
3.1K0
JSP中文乱码问题
之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因。 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 request获取数据乱码 4 response输出信息乱码 5 Cookie导致的编码问题 下面将会对上面几种情况进行介绍:   JSP乱码   这种是最常见的,设置编码的位置位于JSP的第一行,如果在Eclipse中新建一个JSP默认是下面这种: <%@ page language="
用户1154259
2018/01/17
2.7K0
JSP中文乱码问题
js url传值中文乱码完美解决(JAVA)
var url="你要传入的Action的位置&ipid="+ipid+"&keyWord="+key;
HUC思梦
2020/09/03
5K0
JSP中文乱码的产生原因及解决方案
JSP中文乱码的产生原因及解决方案在JSP的开发过程中,经常出现中文乱码的问题,可能一直困扰着大家,现在把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先需要了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文
java达人
2018/01/31
3.5K0
Jsp开发中遇到的中文乱码问题及解决方法
Jsp开发中遇到的中文乱码问题及解决方法 对于程序员来说,乱码问题真的很头疼,下面列举几种常见的乱码供大家学习参考。  1.数据库编码不一致导致乱码   解决方法:   首先查看数据库编码,输入: show variables like "%char%";   确认编码一致,如果不一致,可输入: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8';  
用户1289394
2018/02/26
1.4K0
【Java 进阶篇】解决Java Web应用中请求参数中文乱码问题
在Java Web应用开发中,处理请求参数时经常会遇到中文乱码的问题。当浏览器向服务器发送包含中文字符的请求参数时,如果不正确处理,可能会导致乱码问题,使得参数无法正确解析和显示。本文将详细探讨Java Web应用中请求参数中文乱码问题,以及如何解决这个问题。
繁依Fanyi
2023/10/30
1.2K0
IE、FireFox、Chrome浏览器中关于URL传参中文乱码,解决兼容性问题!
前台用url传值中文,后台用request.getParameter接收参数。在Firefox,Chrome等浏览器中没有问题。但用IE浏览器就又会出现参数中文乱码现象。 IE、Firefox、Chrome浏览器对URL的处理各不相同,浏览器在传输URl时得对URL进行编码,IE默认是以UTF-8来传输 的,Firefox肯定不是以UTF-8来编码,有可能是以ISO-8859-1来编码的,而Chrome好像是采用的GBK来编码。 如果不对中文参数进行处理,那么中文字符经各个浏览器以自己的编码方式传输到服务器后就出现了各种编码方式,而服务器却只能以一种编码方式来对接收到的URL进行解码。这样的话和服务器使用的编码方式一样的浏览器在使用带中文的URl时不会出现问题,其他的浏览器则会出现问题。
麦克劳林
2018/09/11
3.5K0
get请求中url传参中文乱码问题–集锦「建议收藏」
=================================================
全栈程序员站长
2022/07/19
7K0
get请求中url传参中文乱码问题–集锦「建议收藏」
JSP开发过程遇到的中文乱码问题及解决方法
JSP开发过程遇到的中文乱码问题及解决方法 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%"; 确认编码一致,如果不一致,可输入: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8'; 也可设置成gbk编码; 也可以在安装Mysql目录下修改my.ini文件 default-ch
用户1289394
2018/02/26
1.1K0
java中中文显示乱码_java中显示中文乱码解决方法
charset=UTF-8的作用是指定JSP向客户端输出的编码方式为“UTF-8”;
全栈程序员站长
2022/09/08
4.3K0
java 汉字乱码_Java中文乱码问题
Java Source File 中Default encoding 改写成UTF-8(你所需的编码类型) 然后Update,OK确定就可以了。
全栈程序员站长
2022/09/14
7.7K0
java 汉字乱码_Java中文乱码问题
Springmvc解决中文乱码问题
文章目录 1. Springmvc解决中文乱码问题 1.1. POST 1.1.1. 注意 1.1.2. 在web.xml配置 1.2. GET 1.3. 总结 Springmvc解决中文乱码问题 POST 在表单提交的时候,如果遇到中文乱码的情况,springmvc提供了一个CharacterEncodingFilter过滤器,我们只需要在web.xml文件中配置即可 注意 表单的提交方式必须是post 在web.xml中配置CharacterEncodingFilter编码格式要和JSP页面的编码格
爱撒谎的男孩
2019/12/31
1.4K0
JS中页面跳转,传值包含中文时乱码解决方案
转自:http://blog.csdn.net/southcamel/article/details/7703317
forrestlin
2022/04/02
4.1K0
java开发中各种中文乱码问题解决策略「建议收藏」
*注意:字节流和字符流向页面输出数据,不能同时使用(互斥的)。 使用字符流不能直接向页面输出数字(因为默认走ASCII,比如response.getOutputStream().write(97); 的输出结果是字符 a)
全栈程序员站长
2022/09/08
1.3K0
JSP和Servlet的六种中文乱码处理方法
在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以请求的时候便有get请求和post请求。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。
红目香薰
2022/11/29
2K0
web中的cookie管理
  本篇是以JSP为背景介绍,但是在web开发中也是相同的原理。   什么是cookie   由于http是一种无状态的协议,因此服务器收到请求后,只会当做一次新的请求。即便你重复发送了1000次同样的请求,这1000次都属于独立的请求。   这样显然效率很低,如果要登录某个网站,后期的操作都与用户身份有关,难道还得没操作一个页面都得登录一次?   于是cookie和session就诞生了。   cookie和session都是用于帮助http进行状态管理的一种手段。   cookie与session的区别
用户1154259
2018/01/17
8910
Springmvc解决中文乱码问题
Springmvc解决中文乱码问题 本人独立博客https://chenjiabing666.github.io POST 在表单提交的时候,如果遇到中文乱码的情况,springmvc提供了一个CharacterEncodingFilter过滤器,我们只需要在web.xml文件中配置即可 注意 表单的提交方式必须是post 在web.xml中配置CharacterEncodingFilter编码格式要和JSP页面的编码格式一致 解决中文乱码必须使用过滤器(在DispatcherServlet之前执行),而不
爱撒谎的男孩
2018/05/10
2.4K3
Springmvc解决中文乱码问题
如何解决springboot参数传中文乱码
本文案例来自业务部门的一个业务场景。他们的业务场景是他们部门研发了一个微服务上下文透传组件,其透传原理也挺简单的,就是通过springboot拦截器把请求参数塞进threadlocal,然后下游通过threadlocal取到值,服务之间进行feign调用时,再把threadlocal的参数塞到header头里面。这个组件一直用得好好的,突然有一天因为传的参数值是中文,导致乱码。他们通过尝试下面的各种方案,都无法解决。最后就让我们部门排查处理。
lyb-geek
2022/01/06
1.1K0
如何解决springboot参数传中文乱码
java request get 请求乱码解决
维护的系统是jsp框架的,业务在使用过程中出现了日文标题,然后报乱码问题, 一开始一直在处理后天乱码问题,设置request解码方式。。。,但是没有根治。
全栈程序员站长
2021/04/07
1K0
相关推荐
J2EE前后台传值带中文时乱码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文