辅导:System.arraycopy比手工的for复制速度慢?
来源:优易学  2011-10-22 9:56:29   【优易学:中国教育考试门户网】   资料下载   IT书店

  private void fillArray(Object[] objs) {
  for (int i = 0; i < objs.length; i = i + 10) {
  fillArray(objs, i);
  }
  }
  void fillArray(Object[] objs, int start) {
  objs[start++] = new Object();
  objs[start++] = new Date();
  objs[start++] = getRandomString();
  objs[start++] = getRandomString();
  objs[start++] = getRandomString();
  objs[start++] = getRandomString();
  objs[start++] = getRandomString();
  objs[start++] = r.nextLong();
  objs[start++] = getRandomString();
  objs[start++] = getRandomString();
  }
  private Random r = new Random();
  /**
  *获取随机字符串。
  * @return 随机字符串
  */
  String getRandomString() {
  StringBuffer sb = new StringBuffer();
  int loop = 3 + r.nextInt(4);
  while (loop > 0) {
  loop--;
  sb.append((char)(97 + r.nextInt(25)));
  sb.append((char)(65 + r.nextInt(25)));
  }
  return sb.toString();
  }
  void arrayCopy() {
  testMethod("short array\t############", srcArray1);
  testMethod("long array\t########################", srcArray2);
  testMethod("big array\t####################################",
  srcArray3);
  testMethod("huge array\t################################################",
  srcArray4);
  testMethod("mass array\t############################################################",
  srcArray5);
  }
  /**
  *成组测试。
  * @param prmpt 测试提示
  * @param args 测试对象数组
  */
  void testMethod(String prmpt, Object[] args) {
  int loop = 5000000;
  System.out.println(prmpt);
  arrayClone(loop, args);
  arrayManualCopy(loop, args);
  arraySysCopy(loop, args);
  }
  void arrayClone(int loop, Object[] sourceArray) {
  long time = System.currentTimeMillis();
  for (int i = 0; i < loop; ++i) {
  Object[] destArray = (Object[])sourceArray.clone();
  }
  System.out.println(" arrayClone\t" +
  (System.currentTimeMillis() - time));
  }
  void arraySysCopy(int loop, Object[] sourceArray) {
  long time = System.currentTimeMillis();
  for (int i = 0; i < loop; ++i) {
  Object[] destArray = new Object[sourceArray.length];
  System.arraycopy(sourceArray, 0, destArray, 0, sourceArray.length);
  }
  System.out.println(" arraySysCopy\t" +
  (System.currentTimeMillis() - time));
  }
  void arrayManualCopy(int loop, Object[] sourceArray) {
  long time = System.currentTimeMillis();
  for (int i = 0; i < loop; ++i) {
  Object[] destArray = new Object[sourceArray.length];
  for (int j = 0; j < sourceArray.length; ++j) {
  destArray[j] = sourceArray[j];
  }
  }
  System.out.println(" arrayManulCopy\t" +
  (System.currentTimeMillis() - time));
  }
  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训