是这样,有一个int数组,里面大概有几百万条元素,其中后面n(已知)条为垃圾数据。
有人知道怎么截取这个数组,去掉垃圾数据么?
例如:int[] arr = {1,2,3,4,5,0,0,0,0,0};//0为垃圾元素,需要清除。
//最后arr={1,2,3,4,5};条件:
上面已经说了,数据量很大,几百万,所以内存基本上消耗完了(copy 方法行不通),而且时间上应该在10s完成截取(一般的家用计算机)。
大家一起讨论。

解决方案 »

  1.   

    假如你的数组中有1千万个元素,则10000000 * 4B = 10000 * 4k = 10 * 4M = 40M,难道你没有80M内存?
    也许你的问题只是想象出来的,而不是实际中遇到的
      

  2.   

    不copy怎么截取呢?其实可以记录一个有用索引的变量
      

  3.   

    记录有效长度就行了,进行处理或遍历,只处理有效长度
    可以定义一个类,把数组和数组有效长度放一起class IntArray{
       int[] value;
       int len;
    }
      

  4.   

    另外,Java自己提供了一个数组操作方法java.util.Arrays.copyOf(int[] array,int newLength)速度足够快或者直接调用 System.arraycopy
      

  5.   

    内存基本上消耗完了   你这个 数组是怎么存在的呢?一般内存不足的情况 都会利用硬盘吧n已知了   把  前面正常数据写到 硬盘临时文件中   内存中 清除原数组  再读进来。不过这样用到 io 了 效率应该也不会太高吧  不知道一般的 pc机能否 10S内搞定
      

  6.   

    这个可以试试,不错copy估计内存不够用了。