按字母顺序对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 序列化输出键进行排序

如何通过删除名称开头的数字按字母顺序对数据进行排序[重复]

根据子列表中的第二个元素按字母顺序对列表进行排序,但不区分大小写[重复]

Python 如何对输出的词频结果按字母顺序排序(NLTK)

java按字母顺序排序[重复]