java模拟实现ArrayList

默认初始化数组长度为5,扩容时为10。直接上代码

  1 package com.bjpowernode.test.datastructure;
  2 
  3 public class MyArraylist {
  4 
  5     private Object [] datas;
  6 
  7     /**
  8      * 初始化数组大小
  9      */
 10     private static int initsize = 5;
 11 
 12     int index = 0;//数组下标从0开始到size - 1
 13 
 14     public MyArraylist() {
 15         datas = new Object[initsize];
 16     }
 17 
 18     /**
 19      * 默认放在最后一个位置
 20      * @param obj - 目标元素
 21      */
 22     public void add(Object obj) {
 23         int length = datas.length;
 24         if (index > length - 1) {
 25            // throw new RuntimeException("满了,扩容去吧");
 26             //扩容
 27             copyArr();
 28         }
 29         datas[index] = obj;
 30         index++;
 31     }
 32 
 33     /**
 34      * 把元素放在指定位置
 35      * @param obj - 目标元素
 36      * @param _index - 指定下标位置
 37      */
 38     public void add(Object obj, int _index) {
 39         if (index >= datas.length) {
 40           //  throw new RuntimeException("数组已满");
 41             //扩容
 42             copyArr();
 43         }
 44         if (_index > datas.length - 1 || _index < 0) {
 45             throw new RuntimeException("数组越界");
 46         }
 47         if (_index == datas.length - 1) {
 48                 //是要放入数组的末尾,不涉及移动后面元素的位置
 49                 datas[_index] = obj;
 50         } else {
 51             //插入数组非尾的位置
 52             for (int i = index - 1; i >=  _index; i--) {
 53                 datas[i + 1 ] = datas[i];
 54             }
 55             datas[_index] = obj;
 56         }
 57         index++;
 58     }
 59     public Object get(int _index) {
 60         if (_index > datas.length - 1 || _index < 0) {
 61             throw new RuntimeException("数组越界");
 62         }
 63         return datas[_index];
 64 
 65     }
 66 
 67     /**
 68      * 移除指定元素
 69      * @param obj - 目标元素
 70      * @return
 71      */
 72     public boolean remove(Object obj) {
 73         for (int i = 0; i < datas.length; i++) {
 74             if (obj == null) {
 75                 if (equals(datas[i] == null)) {
 76                     //后面的元素向前移动,最后一个元素给空
 77                     for (int j = i + 1; j < index ; j++) {
 78                         datas[j - 1] = datas[j];
 79                     }
 80                     datas[index - 1] = null;
 81                     break;
 82                 }
 83             } else {
 84                 if (obj.equals(datas[i])) {
 85                     //后面的元素向前移动,最后一个元素给空
 86                     for (int j = i + 1; j < index ; j++) {
 87                         datas[j - 1] = datas[j];
 88                     }
 89                     datas[index - 1] = null;
 90                     break;
 91                 }
 92             }
 93 
 94         }
 95         index--;
 96         return true;
 97     }
 98 
 99     /**
100      * 移除指定位置的元素
101      * @param obj - 目标元素
102      * @param _index - 指定下标位置
103      * @return
104      */
105     public boolean remove(Object obj, int _index) {
106         if (_index > datas.length - 1 || _index < 0) {
107             throw new RuntimeException("数组越界");
108         }
109         for (int j = _index + 1; j < index; j++) {
110             datas[j - 1] = datas[j];
111         }
112         datas[index - 1] = null;
113         index--;
114         return true;
115     }
116 
117     /**
118      * 扩容
119      */
120     void copyArr() {
121         Object [] tmp = new Object[initsize * 2];
122         for (int i= 0; i < datas.length; i++) {
123             tmp[i] = datas[i];
124         }
125         datas = tmp;
126     }
127 }
128 class Test {
129 
130     public static void main(String[] args) throws Exception {
131         MyArraylist myArraylist = new MyArraylist();
132         myArraylist.add("a");
133         myArraylist.add("b");
134         myArraylist.add("c");
135         myArraylist.add("d");
136         myArraylist.add("e");
137         myArraylist.get(2);
138         myArraylist.add("f", 2);
139         myArraylist.remove("f", 2);
140 
141     }
142 }

 

 

上一篇:汇编语言:利用分支结构比较三个数的大小


下一篇:苏州市java岗位的薪资状况(2)