按字母顺序对HashMap程序的输出进行排序[重复]
Posted
技术标签:
【中文标题】按字母顺序对HashMap程序的输出进行排序[重复]【英文标题】:Sorting Output of a HashMap Program Alphabetically [duplicate] 【发布时间】:2017-02-19 14:11:29 【问题描述】:这是我读取两个文件的代码,一个带有单词,另一个带有乱码。程序读取乱码字母并将其与文件中的单词进行匹配。它有效,但我希望输出按字母顺序排列。我可以在代码的哪个位置进行排序?
import java.io.*;
import java.util.*;
public class Tester
public static void main(String args[]) throws Exception
BufferedReader dictionary = new BufferedReader( new FileReader(args[0]) );
BufferedReader jumbles = new BufferedReader( new FileReader(args[1]) );
HashMap<String, List<String>> lookup = new HashMap<String, List<String>>();
while(dictionary.ready())
String word = dictionary.readLine();
addWord(word, lookup);
dictionary.close();
while(jumbles.ready())
String jWord = jumbles.readLine();
List<String>dWords= lookup.get(createKey(jWord));
String wordsString = Arrays.toString(dWords.toArray()).replace("[", "").replace("]", "").replace(",", "").trim();
if(dWords != null)
System.out.println(jWord + " " + wordsString);
jumbles.close();
private static String createKey(String word)
char[] cword = word.toCharArray();
Arrays.sort(cword);
return new String(cword);
private static void addWord(String word, Map<String, List<String>> lookup)
String key = createKey(word);
List<String> list = lookup.get(key);
if(list == null)
list = new ArrayList<String>();
lookup.put(key, list);
list.add(word);
输出:
atc act cat tac
otsp post pots stop spot tops opts
gdo dog god
atr rat tar art
arpt trap tarp part
grof frog
sylogs glossy
我想要什么:
arpt part tarp trap
atc act cat tac
atr art rat tar
gdo dog god
grof frog
otsp opts post pots spot stop tops
sylogs glossy
没关系。
修复它:
while(jumbles.ready())
jSorted.add(jumbles.readLine());
jumbles.close();
Collections.sort(jSorted);
for(int i = 0; i < jSorted.size(); i++)
String jWord = jSorted.get(i);
List<String>dWords= lookup.get(createKey(jWord));
String wordsString = Arrays.toString(dWords.toArray()).replace("[", "").replace("]", "").replace(",", "").trim();
if(dWords != null)
System.out.println(jWord + " " + wordsString);
【问题讨论】:
请使用 TreeMap 而不是 HashMap 进行检查。 您的输入文件似乎没有按字母顺序排列,但您想按字母顺序处理单词。读取文件并创建ArrayList
,然后对ArrayList
进行排序,然后处理文件中的单词。
@CS_noob 这无济于事。他想要排序的不是字典输入。这个问题根本不是关于HashMap
,尽管有标题。
【参考方案1】:
您可以创建一个字符串列表,然后对它们进行排序
List<String> result = new ArrayList<>();
while(jumbles.ready())
String jWord = jumbles.readLine();
List<String>dWords= lookup.get(createKey(jWord));
String wordsString = Arrays.toString(dWords.toArray()).replace("[", "").replace("]", "").replace(",", "").trim();
if(dWords != null)
result.add(jWord + " " + wordsString);
jumbles.close();
result.sort(String::compareTo);
result.forEach(System.out::println);
【讨论】:
以上是关于按字母顺序对HashMap程序的输出进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章
按字母顺序对 NSMutableArray 进行排序[重复]
Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序
根据子列表中的第二个元素按字母顺序对列表进行排序,但不区分大小写[重复]