Java 减少循环中的执行时间

Java 减少循环中的执行时间,java,execution-time,Java,Execution Time,我有这样一个代码: RandomAccessFile raf = new RandomAccessFile(new File("C:\\Users\\AhmadMaleki\\IdeaProjects\\Hello world\\src\\kish\\file1"), "r"); for (int i = 1 ; i < 1025 ; i++) { for (int j = 0; j < raf.length() - 4 ; j++)

我有这样一个代码:

  RandomAccessFile raf = new RandomAccessFile(new File("C:\\Users\\AhmadMaleki\\IdeaProjects\\Hello world\\src\\kish\\file1"), "r");

for (int i = 1 ; i < 1025 ; i++)
        {
            for (int j = 0; j < raf.length() - 4 ; j++)
            {
                raf.seek(j);
                byte[] b = new byte[5];
                raf.read(b);

                if (new String (b).equals(wordcount[i]))
                {
                    z[i]++;
                }
            }
        }
RandomAccessFile raf=new RandomAccessFile(新文件(“C:\\Users\\AhmadMaleki\\IdeaProjects\\Hello world\\src\\kish\\file1”),“r”);
对于(int i=1;i<1025;i++)
{
对于(int j=0;j
在这段代码中,raf.length()=26841039,执行时间为4100分钟。
是否有减少运行时间的解决方案?(例如多线程、并行等)

对于启动开关,您可以使用循环来减少对同一文件的读取次数

for (int j = 0; j < raf.length() - 4 ; j++){
    for (int i = 1 ; i < 1025 ; i++){
      // Do your things here ... 
    }
}
for(int j=0;j

然后明智地选择输入流。

欢迎使用堆栈溢出。这个网站实际上应该是为不起作用的代码设计的。你想要的。很可能可以优化。举个例子,我真的怀疑你是否需要读取1024次文件。相反,您可能希望一次扫描读取数据,构建一些结构来保存数据并对其进行操作。您是否真的等了将近3天才完成此操作?继续我怀疑您是否需要RandomAccessFile来完成此操作。以流的形式连续读取速度更快。此外,我会将
wordcount
中的所有单词放入
HashSet
中,这样您就可以检查
如果(words.contains)(new String(b))z[i]++
为了消除循环根本不需要这个循环……只需要按照我在评论中写的那样做:将单词放入一个集合,然后像这样检查:
如果(words.contains(new String(b))z[I]++
移除内部循环,就不需要
I
。通过使用
映射
(而不是集合),你实际上可以做到:
Map.set(单词,地图。获取(单词)+1)
。这确实是一个进步。但可能不太明显。你为什么需要
i
?他只是想检查字典中是否包含该单词,所以我认为
哈希集应该足够了,不是吗?我得到的整个循环的目的只是检查字典中的所有单词,你是对的,我错过了那一部分:)所以是的,按照你的建议使用
映射是解决方案