AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
Vector.java
Go to the documentation of this file.
1package aud;
2
43//@<vector:class
44public class Vector<T> implements Iterable<T> {
45
46 static final int MIN_SIZE = 16;
47
48 T[] data_ = null;
49 int size_ = 0;
50 //@>vector:class
51
54 // @<vector:ctor
55 public Vector() {}
56 // @>vector:ctor
57
59 // @<vector:size
60 public int size() { return size_; }
61 // @>vector:size
62
66 // @<vector:capacity
67 public int capacity() {
68 return data_!=null ? data_.length : 0;
69 }
70 // @>vector:capacity
71
73 public boolean empty() { return size()==0; }
74
78 public T front() {
79 return at(0);
80 }
84 public T back() {
85 return at(size()-1);
86 }
87
91 //@<vector:at
92 public T at(int i) {
93 return data_[check(i)];
94 }
95 //@>vector:at
96
98 public void set(T obj,int i) {
99 data_[check(i)]=obj;
100 }
101
106 //@<vector:check
107 int check(int i) {
108 if (!(0<=i && i<size_))
109 throw new ArrayIndexOutOfBoundsException(i);
110 return i;
111 }
112 //@>vector:check
113
118 @SuppressWarnings("unchecked")
119 //@<vector:reserve
120 public void reserve(int n) {
121 n=(n>=MIN_SIZE) ? n : MIN_SIZE;
122 if (capacity()<n) {
123 T[] a=(T[]) new Object[n]; // unchecked
124 for (int i=0;i<size_;++i)
125 a[i]=data_[i];
126 for (int i=size_;i<a.length;++i)
127 a[i]=null;
128 data_=a;
129 }
130 }
131 //@>vector:reserve
132
137 //@<vector:resize
138 public void resize(int n) {
139 if (n>capacity()) {
140 int c=(3*capacity()+1)/2; // grow $\times\,\frac{3}{2}$
141 reserve(c>n ? c : n);
142 }
143 else if (n<size_) {
144 n=(n>0 ? n : 0); // ensure n>=0
145 for (int i=size_-1;i>=n;--i)
146 data_[i]=null; // garbage!
147 }
148 size_=n;
149 }
150 //@>vector:resize
151
154 //@<vector:push_back
155 public void push_back(T obj) {
156 int n=size_;
157 resize(n+1); // usually not much to do!
158 data_[n]=obj;
159 }
160 //@>vector:push_back
161
165 //@<vector:insert
166 public void insert(int i,T obj) {
167 int n=size_;
168 resize(n+1);
169
170 check(i); // checks 0 <= i < new size
171
172 for (int j=n;j>i;--j) // shift right
173 data_[j]=data_[j-1];
174 data_[i]=obj;
175 }
176 //@>vector:insert
177
181 //@<vector:pop_back
182 public void pop_back() {
183 check(0);
184 data_[--size_]=null; // garbage!
185 }
186 //@>vector:pop_back
187
191 //@<vector:erase
192 public void erase(int i) {
193 check(i);
194 for (int j=i+1;j<size_;++j) // shift left
195 data_[j-1]=data_[j];
196 data_[--size_]=null; // garbage!
197 }
198 //@>vector:erase
199
202 public void clear() {
203 for (int i=0;i<size_;++i)
204 data_[i]=null; // garbage!
205 size_=0;
206 }
207
208 //
209 // iterators
210 //
211
213 public class Iterator implements java.util.Iterator<T> {
214
215 Vector<T> v_;
216 int idx_;
217 Iterator(Vector<T> v,int idx) { v_=v; idx_=idx; }
218
220 @Override public boolean hasNext() { return idx_<v_.size(); }
221
223 @Override public T next() { return v_.at(idx_++); }
224
228 @Override public void remove() {
229 throw new UnsupportedOperationException();
230 }
231 }
232
234 @Override public Iterator iterator() {
235 return new Iterator(this,0);
236 }
237
238 @Override
239 public String toString() {
240 String rv="[";
241 for (int i=0;i<size();++i) {
242 rv+=data_[i];
243 if (i<size()-1)
244 rv+=",";
245 }
246 rv+="]";
247 return rv;
248 }
249}
Forward iterator.
Definition: Vector.java:213
T next()
return current entry and advance
Definition: Vector.java:223
boolean hasNext()
return true unless "advanced" over tail
Definition: Vector.java:220
Implementation of an array-based vector.
Definition: Vector.java:44
void pop_back()
remove last enytry [O(1)]
Definition: Vector.java:182
int capacity()
Get Capacity, i.e., the maximum size the vector can grow without allocating new storage.
Definition: Vector.java:67
Vector()
create empty vector
Definition: Vector.java:55
T back()
get last entry [O(1)]
Definition: Vector.java:84
Iterator iterator()
get forward iterator
Definition: Vector.java:234
void insert(int i, T obj)
Insert new entry obj at position i [O(n)].
Definition: Vector.java:166
void push_back(T obj)
insert new entry obj at the end [O(1) for sufficient capacity]
Definition: Vector.java:155
T at(int i)
get i-th entry [O(1)]
Definition: Vector.java:92
void clear()
remove all entries (capacity remains) [O(1)]
Definition: Vector.java:202
void resize(int n)
Set size of vector.
Definition: Vector.java:138
String toString()
Definition: Vector.java:239
int size()
get number of entries [O(1)]
Definition: Vector.java:60
void erase(int i)
remove entry at position i [O(n)]
Definition: Vector.java:192
T front()
get first entry [O(1)]
Definition: Vector.java:78
void reserve(int n)
Ensure capacity for n entries.
Definition: Vector.java:120
boolean empty()
Is vector empty? [O(1)].
Definition: Vector.java:73