使用Collections.sort()排序存储names.txt数据的ArrayList无效,求排查
问题分析与解决方法
你的代码核心问题出在ArrayList的作用域和操作时机上:
- 你在
while循环内部每次都新建一个ArrayList,这意味着每次循环只把当前读取的单个名称存入列表,对只有一个元素的列表调用Collections.sort()完全起不到排序作用,而且之前读取的名称根本没有被保留下来。 - 你在每次读取一行后就立刻打印列表,这导致输出的始终是单个元素的列表,自然看不到排序效果。
修正后的代码如下:
private static void Excerise04(String fname) throws FileNotFoundException { Scanner filescanner = new Scanner(new File(fname)); // 将ArrayList的创建移到循环外,确保能存储所有名称 ArrayList<String> nameList = new ArrayList<>(); while (filescanner.hasNext()) { String line = filescanner.next(); nameList.add(line); } // 所有名称读取完成后,统一排序 Collections.sort(nameList); // 打印排序后的完整列表 System.out.println(nameList); }
修改说明:
- 把
ArrayList的初始化移到while循环外部,这样整个循环过程中只会创建一个列表,用来累积所有从文件中读取的名称。 - 把
Collections.sort()和System.out.println()移到循环结束后,等所有名称都存入列表再执行排序和打印操作,这样就能得到按字母顺序排序后的完整名称列表。
内容的提问来源于stack exchange,提问作者user18912930
相关产品推荐
相关产品推荐

