Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Arraylist - Fatal编程技术网

Java 建立字符串索引(包含出现行的子字符串列表)的最快方法? 问题:

Java 建立字符串索引(包含出现行的子字符串列表)的最快方法? 问题:,java,sorting,arraylist,Java,Sorting,Arraylist,本质上,我的目标是从文本文件构建IndexEntry对象的ArrayList。IndexEntry具有以下字段:Stringword,表示文本文件中的唯一单词;ArrayListnumsList,一个包含出现word的文本文件行的列表 我构建的ArrayList必须对索引项进行排序,以便它们的word字段按字母顺序排列。然而,我想以最快的方式做到这一点。目前,我访问文本文件中显示的每个单词,并使用二进制搜索确定该单词的索引是否已经存在,以便将当前行号添加到其numsList。如果IndexEnt

本质上,我的目标是从文本文件构建IndexEntry对象的ArrayList。IndexEntry具有以下字段:Stringword,表示文本文件中的唯一单词;ArrayListnumsList,一个包含出现word的文本文件行的列表

我构建的ArrayList必须对索引项进行排序,以便它们的word字段按字母顺序排列。然而,我想以最快的方式做到这一点。目前,我访问文本文件中显示的每个单词,并使用二进制搜索确定该单词的索引是否已经存在,以便将当前行号添加到其numsList。如果IndexEntry不存在,我会在适当的位置创建一个新的IndexEntry,以保持字母顺序

例子: _

一个

两个

一个

_

将生成索引项的数组列表,其输出为字符串(按wordnumsList的顺序),如下所示:

一[1,5],三[7],二[3]

请记住,我使用的是更大的文本文件,同一个单词出现了很多次

问题:
二进制搜索是解决这个问题的最快方法吗?我仍然是Java编程的新手,我很好奇在这种情况下搜索性能更好的算法,或者与我当前的解决方案相比,使用哈希表的相对时间复杂度。

您可以尝试树形图或ConcurrentSkipListMap,它将保持索引的排序

但是,如果您只需要在索引结束时使用一个排序列表,那么好的旧HashMap就是一种选择(ArrayList as value可能也是一种安全的选择) 完成后,获取映射的值并按键对它们进行一次排序

应该足够容纳几百兆的文本文件


如果您使用的是Java 8,请使用整洁的
computeifassent
computeIfPresent
方法。

首先尝试使用
Map
而不是
List
。它将提供恒定的时间查找性能。在构建地图之后,然后将其转换为您的愿望列表。Java已经有了一个这样的类。你需要一张
地图
。所有这些都可以优化,直到奶牛回家,但一如既往:先测量,然后优化