我正在用Java实现这个。
Symbol file Store data file
1\item1 10\storename1
10\item20 15\storename6
11\item6 15\storename9
15\item14 1\storename250
5\item5 1\storename15
用户将使用通配符搜索商店名称,例如storename?
我的工作是搜索商店名称并使用符号数据生成完整的字符串。例如:
item20-storename1
item14-storename6
item14-storename9
我的做法是:
- 逐行读取存储数据文件
- 如果任何行包含匹配的搜索字符串(如
storename?
),我会将该行推送到中间存储结果文件 - 我还将匹配商店名称的 itemno 复制到数组列表中(如 10,15)
- 当这个 arraylist size%100==0 时,我将使用 hashset 删除重复的项目号,显着减小 arraylist 大小
当arraylist大小> 1000
- 使用排序该列表
Collections.sort(itemno_arraylist)
- 打开符号文件并开始逐行读取
- 对于每一行
Collections.binarySearch(itemno_arraylist,itmeno)
- 如果匹配则将结果推送到中间符号结果文件
- 使用排序该列表
继续步骤1,直到存储数据文件的EOF
...
在这一切之后,我将结合两个结果文件(符号结果文件和存储结果文件)来呈现实际的字符串列表。
这种方法是有效的,但它会消耗更多的 CPU 时间和主内存。
我想知道一个更好的解决方案,减少 CPU 时间(目前为 2 分钟)和内存(目前为 80MB)。Java 中有许多可用的集合类。哪一个会为这种巨大的字符串处理问题提供更有效的解决方案?
如果您对这种字符串处理问题有任何想法,那么在 Java 中也会非常有用。
注意:这两个文件的长度接近一百万行。