A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /**
  2. *  定义一个类,模拟实现ArrayList 。
  3. * @author hasee
  4. *
  5. */
  6. public class SxtArrayList {
  7.        
  8.         private Object[] elementData;    // 定义一个Object数组来表能接受任何类型的数据
  9.        
  10.         private int size; //  表示容器有个元素
  11.        
  12.         /**
  13.          * 默认无参数构造器,默认容器的大小为10
  14.          */
  15.         public SxtArrayList(){
  16.                 this(10);
  17.         }
  18.         /**
  19.          * 有参数构造器
  20.          * @param initialCapacity
  21.          */
  22.         public SxtArrayList(int initialCapacity){
  23.                 /**
  24.                  * 判断 如果initialCapacity < 0 抛出异常
  25.                  */
  26.                 if(initialCapacity < 0){
  27.                         try {
  28.                                 throw new Exception();
  29.                         } catch (Exception e) {
  30.                                 e.printStackTrace();
  31.                         }
  32.                 }
  33.                 elementData = new Object[initialCapacity];
  34.         }
  35.        
  36.         public int size(){
  37.                 return size;
  38.         }
  39.         /**
  40.          * 容器是否为空,
  41.          * @return
  42.          */
  43.         public boolean isEmpty(){
  44.                 return size == 0;
  45.         }
  46.         /**
  47.          * 往容器添加一个元素   并实现了自动扩展工作,
  48.          * @param obj
  49.          */
  50.         public void add(Object obj){
  51.                 ensureCapacity();
  52.                 elementData[size++] = obj;
  53.         }
  54.         /**
  55.          * 按指定的索引获得元素对象
  56.          * @param index
  57.          */
  58.         public Object get(int index){
  59.                 rangeCheck(index);
  60.                 return elementData[index];
  61.         }
  62.        
  63.         /**
  64.          * 按照指定的索引删除元素对象
  65.          * @param index
  66.          */
  67.         public void remove(int index){
  68.                 rangeCheck(index);
  69.                 int numMoved = size - index - 1;
  70.                 if(numMoved > 0){
  71.                         System.arraycopy(elementData, index+1, elementData, index, numMoved);
  72.                 }
  73.                 elementData[--size] = null;
  74.         }
  75.         /**
  76.          * 索引检测
  77.          * @param obj
  78.          */
  79.         private void rangeCheck(Object obj){
  80.                 for(int i=0;i<size;i++){
  81.                         if(obj.equals(elementData[i])){
  82.                                 remove(i);
  83.                         }
  84.                 }
  85.         }
  86.         /**
  87.          * 按照指定的缩影替换一个元素对象
  88.          * @param index
  89.          * @param obj
  90.          * @return
  91.          */
  92.         public Object set(int index,Object obj){
  93.                 rangeCheck(index);
  94.                 Object  oldValue = elementData[index];
  95.                 elementData[index] = obj;
  96.                 return oldValue;
  97.         }
  98.         /**
  99.          * 按照指定的索引插入一个元素对象
  100.          * @param index
  101.          * @param obj
  102.          */
  103.         public void add(int index,Object obj){
  104.                 rangeCheck(index);
  105.                 ensureCapacity();
  106.                 System.arraycopy(elementData, index,elementData, index+1,size-index);
  107.                 elementData[index] = obj;
  108.         }
  109.         /**
  110.          * 数组的扩容
  111.          */
  112.         private void ensureCapacity(){
  113.                 if(size == elementData.length){
  114.                         Object[] newArrayList = new Object[size*2+1];
  115.                         //调用数组的方法实现拷贝
  116.                         System.arraycopy(elementData, 0, newArrayList, 0, elementData.length);
  117. //                        for(int i=0;i < elementData.length;i++){
  118. //                                newArrayList[i] = elementData[i];
  119. //                        }
  120.                         elementData = newArrayList;
  121.                 }
  122.         }
  123. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马