Java数组的扩展

package test;

import java.lang.reflect.Array;

/**
 * 如何扩展一个数组
 * 数组是一种效率最高的存储和随机访问对象引用序列的方式
 * 线性序列
 * 缺点:大小固定,并且在整个生命周期都不改变
 * @author Administrator
 *
 */
public class ExpandArray {
 private static float loadFactor = 0.75f;
 private static int DEFAULT_INITIAL_CAPACITY = 16;

 public static void main(String[] args) {
  Object[] values = new Object[DEFAULT_INITIAL_CAPACITY];
  Object[] expandObject = (Object[]) expand(values,
    (int) (values.length * loadFactor));
 }

 public static Object expand(Object array, int newSize) {
  if (array == null) {
   return null;
  }
  Class c = array.getClass();//返回此object运行时类
  if (c.isArray()) {

   //Array提供了动态创建和访问数组的
   int len = Array.getLength(array);//返回指定数组的长度
   if (len >= newSize) {
    return array;
   } else {
    Class classTypeClass = c.getComponentType();//返回表示数组组件类型的class
    //创建一个指定组件类型和长度的新数组
    Object newArray = Array.newInstance(classTypeClass, newSize);
    /**
     * arraycopy(Object src,原数组
                 int srcPos,原数组中的起始位置
                 Object dest,目标数组
                 int destPos,目标数组的起始位置
                 int length)要复制的数组元素的数量
     */
    System.arraycopy(array, 0, newArray, 0, len);
    return newArray;
   }
  } else {
   throw new ClassCastException("传入的参必须是数组!");
  }

 }

}

你可能感兴趣的:(自编文章,Java,C,C++,C#)