不要小瞧数组
1 public class Array01{
2
3 private int[] data;
4 private int size; // 记录数组中实际存在的元素个数
5
6 // 构造函数,传入数组的容量capacity构造Array01
7 public Array01(int capacity){
8 data = new int[capacity];
9 size = 0;
10 }
11
12 // 无参数的构造函数,默认数组的容量capacity = 30
13 public Array01(){
14 this(30); // 调用data.Array01(capacity)
15 }
16
17 // 获取数组的容量
18 public int getCapacity(){
19 return data.length;
20 }
21
22 // 获取数组中的实际存储元素个数
23 public int getSize(){
24 return size;
25 }
26
27 // 判断数组实际元素个数是否为空
28 public boolean isEmpty(){
29 /*
30
31 /if(0 == size){
32 return true;
33 }
34
35 return false;
36
37 */
38
39 return 0 == size;
40 }
41
42 // 在index索引的位置插入一个新元素e
43 public void add(int index, int e){
44 // 1.判断index是否合法,非法时抛出异常
45 if(index < 0 || index > size){
46 throw new IllegalArgumentException("Add failed.Index is illegal.");
47 }
48
49 // 2.判断数组是否为满,满时先扩容数组容量
50 if(data.length == size){
51 resize(2 * data.length);
52 }
53
54 // 3.插入元素,并修改记录元素个数的size值
55 for(int i = size - 1; i >= index; i--){
56 data[i + 1] = data[i];
57 }
58
59 data[index] = e;
60
61 size++;
62 }
63
64 // 向数组头部添加一个元素
65 public void addFirst(int e){
66 add(0,e);
67 }
68
69 // 向数组尾部添加一个元素
70 public void addLast(int e){
71 add(size,e);
72 }
73
74 // 获取index索引位置的元素
75 public int get(int index){
76 if(index < 0 || index >= size){
77 throw new IllegalArgumentException("Get failed. Index is illegal.");
78 }
79 return data[index];
80 }
81
82 // 修改index索引位置的元素为e
83 public void set(int index, int e){
84 if(index < 0 || index >= size){
85 throw new IllegalArgumentException("Set failed. Index is illegal.");
86 }
87 data[index] = e;
88
89 }
90
91 // 查找数组中是否存在元素e
92 public boolean contains(int e){
93 for(int i = 0 ; i < size; i++){
94 if(e == data[i]){
95 return true;
96 }
97 }
98 return false;
99 }
100
101 // 查找数组中元素e所在的索引,如果不存在元素e,则返回-1
102 public int find(int e){
103 for(int i = 0; i < size; i++){
104 if(e == data[i]){
105 return i;
106 }
107 }
108 return -1;
109 }
110
111 // 从数组中删除index位置的元素, 返回删除的元素
112 public int remove(int index){
113 if(index < 0 || index > size){
114 throw new IllegalArgumentException("Remove failed. Index is illegal.");
115 }
116
117 int res = data[index];
118
119 for(int i = index + 1; i < size; i++){
120 data[i - 1] = data[i];
121 }
122
123 size--;
124
125 if(data.length / 4 == size && 0 != data.length / 2){
126 resize(data.length / 2);
127 }
128
129 return res;
130 }
131
132 // 从数组中删除第一个元素, 返回删除的元素
133 public int removeFirst(){
134 return remove(0);
135 }
136
137 // 从数组中删除最后一个元素, 返回删除的元素
138 public int removeLast(){
139 return remove(size - 1);
140 }
141
142 // 从数组中删除元素e
143 public void removeElement(int e){
144 if(-1 != find(e)){
145 remove(find(e));
146 }
147 }
148
149 // 重写toString方法
150 @Override
151 public String toString(){
152 StringBuilder res = new StringBuilder();
153 res.append(String.format("Array01: size = %d, capacity = %d\n",size,data.length));
154 res.append('[');
155 for(int i = 0; i < size; i++){
156 res.append(data[i]);
157 if((size - 1 ) != i){
158 res.append(", ");
159 }
160 }
161 res.append(']');
162
163 return res.toString();
164 }
165
166 // 对数组的容量变成newCapacity大小
167 private void resize(int newCapacity){
168 int[] newData = new int[newCapacity];
169 for(int i = 0; i < size; i++){
170 newData[i] = data[i];
171 }
172 data = newData;
173 }
174
175 public static void main(String[] args) {
176
177 Array01 arr = new Array01();
178 System.out.print("\n\t 创建一个新的数组 \t\n");
179 for(int i = 0 ; i < 15 ; i++)
180 arr.addLast(i);
181 System.out.println(arr);
182
183 System.out.print("\n\t 添加一个元素 \t\n");
184 arr.add(1, 100);
185 System.out.println(arr);
186
187 System.out.print("\n\t 在数组所有元素前添加一个元素 \t\n");
188 arr.addFirst(-1);
189 System.out.println(arr);
190
191 System.out.print("\n\t 删除索引为2所在位置上的一个元素 \t\n");
192 arr.remove(2);
193 System.out.println(arr);
194
195
196 System.out.print("\n\t 删除指定值为7的元素 \t\n");
197 arr.removeElement(7);
198 System.out.println(arr);
199
200 System.out.print("\n\t 删除数组起始位置上的元素 \t\n");
201 arr.removeFirst();
202 System.out.println(arr);
203
204 }
205 }
运行结果: