关于使用hashMap实现文本排序问题(使用记事本更改编码格式后无序解析)

需要排序前的测试文本内容(a.txt)

首先分析一下实现步骤:

1:使用Io流,先从文件中将文本内容读取到内存

2:然后把内容放入HashMap中,HashMap会自动对Key进行排序,正好符合自然数的顺序,这时候有个疑问,不是说HashMap是无序的吗?怎么用HashMap进行排序?分析之前请先看下面代码:

代码是我参照HashMap源码中的Hash()方法来写的(欢迎指正)先给map中的key计算一个hash值,然后拿着这个值与容器中的长度异或运算(HashMap默认长度是16),得出来的就是数组的下标,也就是元素存放的位置,我们拿字符串"1","2""3",进行测试,得到如下结果:

由此可以看出,用单字符串作为HashMap的key,正好可以实现自然顺序升序的排列,那么除了HashMap,还有其他哪些集合可以实现这个排序呢?其实TreeMap也是可以的,它是有序集合,内部对key进行自然顺序的排序,默认升序

3:遍历hashMap,把读取的数据写入到文件中b.txt

代码如下:

运行结果:

这个地方有个问题,我的电脑是window系统,文件默认编码方式是gbk,大家知道,idea文件默认编码方式是utf8,我把a.txt用记事本打开,将它的编码方式改成了gbk,运行顺序可以排列没问题,但是在改回utf8时,问题出现了,顺序是乱的,这个地方就涉及一个utf8的bom问题,具体可以参照https://blog.csdn.net/change_any_time/article/details/79572370,所以,用Notepad++改一下文件的编码格式,问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值