Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java创建单词游戏(字典文件组织问题)_Java_Android - Fatal编程技术网

用Java创建单词游戏(字典文件组织问题)

用Java创建单词游戏(字典文件组织问题),java,android,Java,Android,我尝试用Java创建一个单词游戏,它引用一个文本文件(.txt)作为它的主词典,确切地说是英语 这本词典大约有85000个单词 我将要求用户输入并检查它是否在字典中,如果在字典中,用户将为此获得分数 但是有一个问题 我是否将字典中的85000个单词存储在Hashmaps中 有没有办法让我检查用户输入的字符串是否在字典中,以及它的奖励分数 有关于这个的任何输入吗?最好将所有85000个单词加载到一个HashSet中,并使用contains进行检查 Set<String> knownWo

我尝试用Java创建一个单词游戏,它引用一个文本文件(.txt)作为它的主词典,确切地说是英语

这本词典大约有85000个单词

我将要求用户输入并检查它是否在字典中,如果在字典中,用户将为此获得分数

但是有一个问题

  • 我是否将字典中的85000个单词存储在Hashmaps中
  • 有没有办法让我检查用户输入的字符串是否在字典中,以及它的奖励分数

  • 有关于这个的任何输入吗?

    最好将所有85000个单词加载到一个HashSet中,并使用contains进行检查

    Set<String> knownWords = new HashSet<>();
    // Populate the set
    ...
    // Check with 
    knownWords.contains(userInput);
    
    Set knownWords=new HashSet();
    //填充集合
    ...
    //核对
    包含(用户输入);
    
    一般来说,即使是更便宜的机器人也至少有5千兆字节的内存,可以处理这个集合(最多大约3MB)。Java哈希集合在查找方面非常有效,因此检查本身应该很快

    如果你想进一步降低内存消耗,考虑计算每个单词的一个短散列,通过哈希将字典分成多个文件。然后当用户输入一个单词时,计算输入的相同哈希值,将该文件加载到内存中,并用相同的包含方法进行评估。


    (别忘了将字典和用户输入都小写)

    最好将所有85000个单词加载到哈希集中,并使用contains进行检查

    Set<String> knownWords = new HashSet<>();
    // Populate the set
    ...
    // Check with 
    knownWords.contains(userInput);
    
    Set knownWords=new HashSet();
    //填充集合
    ...
    //核对
    包含(用户输入);
    
    一般来说,即使是更便宜的机器人也至少有5千兆字节的内存,可以处理这个集合(最多大约3MB)。Java哈希集合在查找方面非常有效,因此检查本身应该很快

    如果你想进一步降低内存消耗,考虑计算每个单词的一个短散列,通过哈希将字典分成多个文件。然后当用户输入一个单词时,计算输入的相同哈希值,将该文件加载到内存中,并用相同的包含方法进行评估。


    (不要忘记将字典和用户输入都小写)

    我将NavigableSet用于类似的大小写。我将NavigableSet用于类似的大小写。我可以改用数组列表吗?将字典中的单词存储在其中,然后使用//检查knownWords.contains(userInput)进行检查;可以,但不应该。检查HashSet#contains本质上是一个常量时间操作(假设哈希函数表现良好),而对于列表,您必须遍历整个列表以确定单词是否存在。使用有序列表,您可以将其改进为O(log n)但是使用哈希集的方式仍然更快。如果有一个单独的例子需要重复这些单词,那么就考虑使用像Link KeHaseSt这样的东西,为您提供有序迭代器(特别是按顺序返回元素)。。我可以改为使用数组列表吗?将字典中的单词存储在其中,然后使用//check with Knowwords.contains(userInput)进行检查;可以,但不应该。检查HashSet#contains本质上是一个常量时间操作(假设是一个性能良好的哈希函数)而对于列表,您必须遍历整个列表,以确定单词是否存在。使用有序列表,您可以将其改进为O(logn)但是使用哈希集的方式仍然更快。如果你有一个单独的例子,你需要迭代这些单词,以便考虑使用像Link KeHaseSt这样的东西,为你提供有序的迭代器(特别是按顺序返回元素)。