关于使用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.****.net/change_any_time/article/details/79572370,所以,用Notepad++改一下文件的编码格式,问题解决