这里就有一个问题啦,读文件的问题,从文件中读出流,然后写到程序里面,然后再比较肯定会比你这个慢啊。你new一个数据其实不怎么占时间的。

解决方案 »

  1.   

    首先,如果你用ArrayList来放的话,请先判断数据条数,new对象时用带容量参数的构造方法。
    例如,有100000条数据, new ArrayList(100000);
    这要在添加数据时效率大很多,原理是ArrayList的内部实现是用数组的,数组是不可变的对象。详细的就不说了。
    如果用LinkedList的话,在查找时,用iterator来遍历。用流读文件也是个瓶颈,可以考虑用MappedByteBuffer ,先把文件映射到内存,然后读写效率就可以提高不少了。但这是以内存为代价的。
      

  2.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
      

  3.   

    你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
      

  4.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
    楼上的,老军医2这位兄弟说得有点道理,至少一开始创建一个较大的List,可以尽可能的避免List底层的数组扩容。
    我觉得主要的瓶颈应该是在用流读文件这一点上。可以想想这方面的优化方案。
    你试试用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)其中size为你设置的缓冲容量大小,这样应该会比较快。
      

  5.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
    楼上的,老军医2这位兄弟说得有点道理,至少一开始创建一个较大的List,可以尽可能的避免List底层的数组扩容。
    我觉得主要的瓶颈应该是在用流读文件这一点上。可以想想这方面的优化方案。
    你试试用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)其中size为你设置的缓冲容量大小,这样应该会比较快。好像用的就是BUFEREDREADER  还是慢···
      

  6.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
    楼上的,老军医2这位兄弟说得有点道理,至少一开始创建一个较大的List,可以尽可能的避免List底层的数组扩容。
    我觉得主要的瓶颈应该是在用流读文件这一点上。可以想想这方面的优化方案。
    你试试用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)其中size为你设置的缓冲容量大小,这样应该会比较快。好像用的就是BUFEREDREADER  还是慢···
    设置了缓冲的大小为多少啊?
      

  7.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
    楼上的,老军医2这位兄弟说得有点道理,至少一开始创建一个较大的List,可以尽可能的避免List底层的数组扩容。
    我觉得主要的瓶颈应该是在用流读文件这一点上。可以想想这方面的优化方案。
    你试试用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)其中size为你设置的缓冲容量大小,这样应该会比较快。好像用的就是BUFEREDREADER  还是慢···
    设置了缓冲的大小为多少啊?好像没设置 但是是用BUFFER从文件读的  还是慢  
      

  8.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
    楼上的,老军医2这位兄弟说得有点道理,至少一开始创建一个较大的List,可以尽可能的避免List底层的数组扩容。
    我觉得主要的瓶颈应该是在用流读文件这一点上。可以想想这方面的优化方案。
    你试试用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)其中size为你设置的缓冲容量大小,这样应该会比较快。好像用的就是BUFEREDREADER  还是慢···
    设置了缓冲的大小为多少啊?好像没设置 但是是用BUFFER从文件读的  还是慢  
    你设置缓冲大小试试,如果不设置缓冲好像没什么效果。设置缓冲大小好像速度会快不少。
      

  9.   

       你这点提醒我了 是的 我这NEW的是在内存里 确实比较快   我才反应过来     文件好像是这样   2个文件进行对比 
    例如 A文件 
     1.A001|B00C|D007
     2...
     3... 一共200多万行  
     B文件 跟A文件一样
    来进行对比  速度真的好慢    有什么好的解决方案没?  吧200多万条数据一下次放到内存 如果内存不大肯定爆的  请问有什么好办法?谢谢啦
    楼上的,老军医2这位兄弟说得有点道理,至少一开始创建一个较大的List,可以尽可能的避免List底层的数组扩容。
    我觉得主要的瓶颈应该是在用流读文件这一点上。可以想想这方面的优化方案。
    你试试用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)其中size为你设置的缓冲容量大小,这样应该会比较快。好像用的就是BUFEREDREADER  还是慢···
    设置了缓冲的大小为多少啊?
    读文件原本就是一个很耗费时间的操作,我觉得在读文件上想办法优化耗费的时间,倒不如在比较算法上优化耗费的时间更好
      

  10.   


    可每次读几百万行的文本TXT 就会慢···
      

  11.   

    用缓冲流来读文件BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),size)