数组实现顺序表

数组实现顺序表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
public class <AnyType> implements Iterable<AnyType> {
private static final int DEFAULT_CAPACITY = 10;
private int thesize;
private AnyType[] theItems;
public (){
clear();
}
public void clear(){
thesize = 0;
ensureCapacity(DEFAULT_CAPACITY);
}
public int size(){
return thesize;
}
public boolean isEmpty(){
return size()==0;
}
public void trimTosize(){
ensureCapacity(size());
}
public AnyType get(int idx){
if(idx < 0 && idx >= size()){
throw new ArrayIndexOutOfBoundsException();
}
return theItems[idx];
}
public AnyType set(int idx, AnyType newVal){
if(idx < 0 && idx >= size()){
throw new ArrayIndexOutOfBoundsException();
}
AnyType old = theItems[idx];
theItems[idx] = newVal;
return old;
}
* 数组过小时对数组进行扩容
* @param newCapacity 新的数组大小
*/
public void ensureCapacity(int newCapacity){
if (newCapacity<thesize)
return;
AnyType[] old = theItems;
theItems = (AnyType[]) new Object[newCapacity];
for (int i = 0; i < size(); i++) {
theItems[i] = old[i];
}
}
public boolean add(AnyType x){
add(size(),x);
return true;
}
* 指定位置添加元素
* @param idx 指定位置
* @param x 添加元素
*/
public void add(int idx, AnyType x){
if (theItems.length==size())
ensureCapacity(size()*2+1);
for (int i = thesize; i>idx; i--){
theItems[i]=theItems[i-1];
}
theItems[idx] = x;
thesize++;
}
public AnyType remove(int idx){
AnyType removedItem = theItems[idx];
for (int i = idx; i<size(); i++){
theItems[i]=theItems[i+1];
}
thesize--;
return removedItem;
}
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
public Iterator<AnyType> iterator() {
return new ArrayListIterator() ;
}
private class ArrayListIterator implements java.util.Iterator<AnyType>{
private int current = 0;
public boolean hasNext() {
return current<size();
}
public AnyType next() {
if (!hasNext()){
throw new java.util.NoSuchElementException();
}
return theItems[current++];
}
public void remove() {
MyArrayList.this.remove(--current);
}
}
}