动态数组实现代码
package array;
import java.util.Set;
public class Array<E> {
private E[] data;
private int size;//下一个要放置的位置索引 [0,size-1]是已经放置好的元素
//有参构造
public Array(int capacity) {
data=(E[])new Object[ capacity];//新建容量大小
size=0;//数组里元素个数
}
//无参构造
public Array() {
this(10);
}
//判断是否为空
public boolean isEmpty() {
return size==0;
}
//返回元素个数
public int getSize() {
return size;
}
//向数组中添加元素
public void add(E e) {
add(size,e);
}
//向头部添加元素
public void addFirst(E e) {
add(0,e);
}
//添加元素
public void add(int index,E e) {
if (index<0||index>size) {
throw new IllegalArgumentException("add failed");
}
if (size==data.length) {
resize(2*data.length);
}
for (int i = size-1; i >= index; i--) {
data[i+1]=data[i];
}
data[index]=e;
size++;
}
//扩容操作
private void resize(int i) {
E[] newarr=(E[])new Object[i];
for (int j = 0; j < size; j++) {
newarr[j]=data[j];
}
data=newarr;
}
//打印数组
@Override
public String toString() {
StringBuilder res=new StringBuilder();
res.append("size="+size+"acpiticy="+data.length+" ");
res.append("[");
for (int i = 0; i < size; i++) {
res.append(data[i]);
if (i!=size-1) {
res.append(",");
}
}
res.append("]");
return res.toString();
}
//取出元素
public E get(int index) {
if (index<0||index>=size) {
throw new IllegalArgumentException("get failed");
}
return data[index];
}
//给指定位置赋值
public void set(int index,E e) {
if (index<0||index>=size) {
throw new IllegalArgumentException("set failed");
}
data[index]=e;
}
//数组中是否包含制定元素
public boolean contains(E e) {
for (int i = 0; i < size; i++) {
if (data[i].equals(e)) {
return true;
}
}
return false;
}
//数组指定元素的索引
public int find(E e) {
for (int i = 0; i < size; i++) {
if (data[i].equals(e)) {
return i;
}
}
return -1;
}
//删除第一个数
public E removeFirst() {
return remove(0);
}
//删除最后一个数
public E removeLast() {
return remove(size-1);
}
//删除指定索引数
public E remove (int index) {
if (index<0||index>=size) {
throw new IllegalArgumentException("remoce failed");
}
E res=data[index];
for (int i =index+1 ; i < size; i++) {
data[i-1]=data[i];
}
size--;
if(size==data.length/4) {
resize(data.length/2);
}
return res;
}
//删除指定元素
public void removeElement(E e) {
int index=find(e);
if (index!=-1) {
remove(index);
}
}
}
1
package array;
2
3
import java.util.Set;
4
5
public class Array<E> {
6
private E[] data;
7
private int size;//下一个要放置的位置索引 [0,size-1]是已经放置好的元素
8
//有参构造
9
public Array(int capacity) {
10
data=(E[])new Object[ capacity];//新建容量大小
11
size=0;//数组里元素个数
12
}
13
//无参构造
14
public Array() {
15
this(10);
16
}
17
//判断是否为空
18
public boolean isEmpty() {
19
return size==0;
20
}
21
//返回元素个数
22
public int getSize() {
23
return size;
24
}
25
//向数组中添加元素
26
public void add(E e) {
27
add(size,e);
28
}
29
//向头部添加元素
30
public void addFirst(E e) {
31
add(0,e);
32
}
33
//添加元素
34
public void add(int index,E e) {
35
if (index<0||index>size) {
36
throw new IllegalArgumentException("add failed");
37
}
38
if (size==data.length) {
39
resize(2*data.length);
40
}
41
for (int i = size-1; i >= index; i--) {
42
data[i+1]=data[i];
43
}
44
data[index]=e;
45
size++;
46
}
47
//扩容操作
48
private void resize(int i) {
49
E[] newarr=(E[])new Object[i];
50
for (int j = 0; j < size; j++) {
51
newarr[j]=data[j];
52
}
53
data=newarr;
54
55
56
}
57
//打印数组
58
59
public String toString() {
60
StringBuilder res=new StringBuilder();
61
res.append("size="+size+"acpiticy="+data.length+" ");
62
res.append("[");
63
for (int i = 0; i < size; i++) {
64
res.append(data[i]);
65
if (i!=size-1) {
66
res.append(",");
67
}
68
}
69
res.append("]");
70
71
return res.toString();
72
73
}
74
//取出元素
75
public E get(int index) {
76
if (index<0||index>=size) {
77
throw new IllegalArgumentException("get failed");
78
}
79
80
return data[index];
81
}
82
//给指定位置赋值
83
public void set(int index,E e) {
84
if (index<0||index>=size) {
85
throw new IllegalArgumentException("set failed");
86
}
87
data[index]=e;
88
89
}
90
//数组中是否包含制定元素
91
public boolean contains(E e) {
92
for (int i = 0; i < size; i++) {
93
if (data[i].equals(e)) {
94
return true;
95
}
96
}
97
return false;
98
}
99
//数组指定元素的索引
100
public int find(E e) {
101
for (int i = 0; i < size; i++) {
102
if (data[i].equals(e)) {
103
return i;
104
}
105
}
106
return -1;
107
}
108
//删除第一个数
109
public E removeFirst() {
110
return remove(0);
111
}
112
//删除最后一个数
113
public E removeLast() {
114
return remove(size-1);
115
}
116
//删除指定索引数
117
public E remove (int index) {
118
if (index<0||index>=size) {
119
throw new IllegalArgumentException("remoce failed");
120
}
121
E res=data[index];
122
for (int i =index+1 ; i < size; i++) {
123
data[i-1]=data[i];
124
}
125
126
size--;
127
if(size==data.length/4) {
128
resize(data.length/2);
129
}
130
return res;
131
132
}
133
//删除指定元素
134
public void removeElement(E e) {
135
int index=find(e);
136
if (index!=-1) {
137
remove(index);
138
}
139
}
140
}
141