无为

无为则可为,无为则至深!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
在Java中,数组不能动态重设大小。一个可替代方法是使用java.util.ArrayList (或者java.util.Vector)代替使用原始数组(array)。另一种解决方案是用一个不同大小的数组重设数组,将旧数组内容拷贝到新的数组。下面做了个演示程序实现第二种方案,编写了个通用函数rsizeArray (参数)来实现此功能:

/**
* 使用一个新大小重设数组,并拷贝旧数组的内容到新数组
* @param oldArray 旧数组被重设
* @param newSize 新数组大小
* @return 返回带同样内容的新数组
*/
private static Object resizeArray (Object oldArray, int newSize){
int oldSize = java.lang.reflect.Array.getLength(oldArray);
Class elementType = oldArray.getClass().getComponentType();
Object newArray = java.lang.reflect.Array.newInstance(
elementType,newSize);
int preserveLength = Math.min(oldSize,newSize);
if (preserveLength > 0)
System.arraycopy (oldArray,0,newArray,0,preserveLength);
return newArray;
}
// resizeArray()测试用例
public static void main (String[] args) {
int[] a = {1,2,3};
a = (int[])resizeArray(a,5);
a[3] = 4;
a[4] = 5;
for (int i=0; i<a.length; i++)
System.out.println (a[i]); }

那二维数组如何重设大小呢? 很简单,就是处理数组的数组呀!

要想重设二维数组,resizeArray方法必须处理外部数组和所有嵌套数组,如下例:

  int a[][] = new int[2][3];
//...
a = (int[][])resizeArray(a,20);
// 新数组是[20][3]
for (int i=0; i<a.length; i++) {
if (a[i] == null)
a[i] = new int[30];
else a[i] = (int[])resizeArray(a[i],30);
}
// 新数组是[20][30]


凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。

posted on 2007-09-19 10:34 草儿 阅读(2979) 评论(4)  编辑  收藏 所属分类: java

Feedback

# re: Java中如何重设数组的大小? 2007-09-19 10:51 千里冰封
呵呵,有创意  回复  更多评论
  

# re: Java中如何重设数组的大小? 2007-09-19 11:29 Unmi
多看看ArrayList的源代码吧,顾名思意它是用数组来实现的List,看看它是如何实现数组拷贝的。  回复  更多评论
  

# re: Java中如何重设数组的大小? 2007-09-19 11:48 dennis
System.arraycopy  回复  更多评论
  

# re: Java中如何重设数组的大小?[未登录] 2007-09-20 13:09 ivan
有新意~不过反射浪费资源吧~  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: