java - 如何用更少的内存提高字符串处理的性能?

标签 java string performance collections

我正在用 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

我的做法是:

  1. 逐行读取存储数据文件
  2. 如果任何行包含匹配的搜索字符串(如 storename?),我会将那行推送到中间存储结果文件
  3. 我还会将匹配的商店名称的 itemno 复制到数组列表中(例如 10,15)
  4. 当这个 arraylist 大小为 %100==0 时,我将使用 hashset 删除重复项号,显着减少 arraylist 大小
  5. 当数组列表大小>1000

    1. 使用 Collections.sort(itemno_arraylist) 对该列表进行排序
    2. 打开符号文件并开始逐行阅读
    3. 对于每一行 Collections.binarySearch(itemno_arraylist,itmeno)
    4. 如果匹配则将结果推送到中间符号结果文件
  6. 继续执行步骤 1 直到存储数据文件的 EOF

...

完成所有这些之后,我将组合两个结果文件(符号结果文件和存储结果文件)来呈现实际的字符串列表。

这种方法行之有效,但会消耗更多的 CPU 时间和主内存。

我想知道一个更好的解决方案,它可以减少 CPU 时间(目前为 2 分钟)和内存(目前为 80MB)。 Java 中有许多可用的集合类。对于这种巨大的字符串处理问题,哪一个会给出更有效的解决方案?

如果您对 Java 中的此类字符串处理问题有任何想法,那将是非常有用的。

注意:两个文件的长度都将近一百万行。

最佳答案

将两个平面文件替换为嵌入式数据库(有 plenty of them ,我过去使用 SQLite 和 Db4O):问题解决。

关于java - 如何用更少的内存提高字符串处理的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995617/

相关文章:

性能:数据存储写入与请求日志写入

mysql - 构建关注者/关注 MySQL 数据库的最佳实践

java - 如何删除双链表中的特定条目?

java - 从自定义对象获取公共(public)文件 url

java - Hibernate 使用 hbm2ddl.auto=update 保留一些表,使用 hbm2ddl.auto=create 重新加载一些表

JAVA Unrecognized Character 第一行第一个字符

javascript - 将字符串转换为正则表达式

java - 未调用 paintComponent

c++ - c++ 中有多少种方法可以逐个字符地读取字符串以对每个字符执行所需的操作?

mysql - 如何优化具有许多相同选择的 SQL 查询?