默认初始化数组长度为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 }