现在需要从一个文件中读取数据到一个数组中,数组的大小要到读完文件才能确定大小。最终结果可能数组会比较大也可能比较小,因此需要动态的分配一个数组。
如果先分配100个长度的数组,如果读取时发现数组小了,就分配一个长度为200的数组,还小就分配个长度为300。将前一个数组拷贝过来,并丢弃前一个数组。结束时,再将得到的数组多余部分裁掉。这样的方法似乎比较低效,并且可能会比较消耗内存,因此想请问各位有没有比较高效的方法解决这个问题?
------解决方案--------------------
那就用list啊
------解决方案--------------------
为什么一定要用数组?换个数据结构不行?
------解决方案--------------------
参考一下ArrayList的实现吧,或者直接用。一般采用二倍的扩充方式
------解决方案--------------------
or LinkedList
------解决方案--------------------
元素填充完毕之后调trimToSize()去除多余内存。
------解决方案--------------------
------解决方案--------------------
如果你喜欢研究的话那就看看。
System类的静态方法吧,
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
------解决方案--------------------
------解决方案--------------------
数组对象不是一个类对象??数组是怎么实现的??
------解决方案--------------------
------解决方案--------------------
File的话,可以直接通过 file.length()得到文件大小,然后一次性分配好内存空间,然后载入
13楼已经说的很清楚了
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
对于多个 IDAT 块,用LinkedList来保存即可
------解决方案--------------------
------解决方案--------------------
在java,集合类的很多实现类当中,到处可见数据接口扩容的代码,常用的都是*2。另外使用native方法copy数组内容,基本已经达到了最佳速度了。
public static native void arraycopy();
至于内存,java本身就是个耗内存的主,呵呵。
------解决方案--------------------