为什么这样排序会出错

public static void main(String[]args) throws java.io.IOException {
        BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\MeLT\\Desktop\\JAVA-START\\src\\second\\Poem.txt"));
        BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\Users\\MeLT\\Desktop\\JAVA-START\\src\\second\\Fix.txt"));
        String line;
        HashMap<String,String> hm=new HashMap<>();
        while((line=br.readLine())!=null){
            String[] part = line.split("\\.");
            hm.put(part[0],part[1]);
        }
        for(String key:hm.keySet()){
            String value=hm.get(key);
            line=key+"."+value;
            bw.write(line);
            bw.newLine();
        }
        br.close();
        bw.close();
        }

我先把春江花月夜顺序打乱进行排序,结果排序后1-10部分和11-18脱节了...求大佬解惑

你这样的比较是字符串的比较,并不是表面上单纯的"11"<"12",而是转换为了ascII码,前面的“1”对比相同,第二个字符对比,“1”<"2",后面的是因为“.”>“1”~“9”的,所以才会这样。

如果你想要排序的话,可以用MAP<K,V>,K存储序号,V存储后面的语言,之后将所有的K存储在List,然后排序。在之后按照顺序去Map中将他们的诗词拿出来;

这就要讲到hashmap的底层原理了

你的意思是存到Map集合中然后打印乱了吗?

如果是这样的,Map由于Key是使用Hash计算得到的地址,不能保证有序哦。

可参考:https://blog.csdn.net/weixin_55086330/article/details/113873839

因为hashMap存储key时是无序的,如果你想要有序,用treeMap,实现Comparable接口就行了,希望你看懂了能采纳嘻嘻