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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
|
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100090.html;106,k100091.html;107,k100093.html;108,k100097.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100091.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100093.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100097.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">Kapitel 14 - Collections I
</table>
<hr>
<!-- Section -->
<a name="abschnittvector"></a>
<h2>14.2 Die Klasse Vector </h2>
<hr>
<ul>
<li><a href="k100092.html#abschnittvector">14.2 Die Klasse Vector</a>
<ul>
<li><a href="k100092.html#sectlevel3id014002001">14.2.1 Einfügen von Elementen</a>
<li><a href="k100092.html#sectlevel3id014002002">14.2.2 Zugriff auf Elemente</a>
<li><a href="k100092.html#sectlevel3id014002003">14.2.3 Der Vektor als Iterator</a>
</ul>
</ul>
<hr>
<p>
Die Klasse <a name="ixa100868"><a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a></a>
aus dem Paket <a href="index_j.html#ixb100127"><font color=#000080><tt>java.util</tt></font></a>
ist die Java-Repräsentation einer <a name="ixa100869"><i>linearen Liste</i></a>.
Die Liste kann Elemente beliebigen Typs enthalten, und ihre Länge
ist zur Laufzeit veränderbar. <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
erlaubt das Einfügen von Elementen an beliebiger Stelle und bietet
sowohl sequenziellen als auch wahlfreien Zugriff auf die Elemente.
Das JDK realisiert einen <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
als Array von Elementen des Typs <a href="index_o.html#ixb100224"><font color=#000080><tt>Object</tt></font></a>.
Daher sind Zugriffe auf vorhandene Elemente und das Durchlaufen der
Liste schnelle Operationen. Löschungen und Einfügungen,
die die interne Kapazität des Arrays überschreiten, sind
dagegen relativ langsam, weil Teile des Arrays umkopiert werden müssen.
In der Praxis können diese implementierungsspezifischen Details
allerdings meist vernachlässigt werden, und ein <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
kann als konkrete Implementierung einer linearen Liste angesehen werden.
<!-- Section -->
<a name="sectlevel3id014002001"></a>
<h3>14.2.1 Einfügen von Elementen </h3>
<p>
Das Anlegen eines neuen Vektors kann mit Hilfe des parameterlosen
Konstruktors erfolgen:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public Vector()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Vector.html" onClick="this.href=getApiDoc('java.util.Vector')"><font color="#660066" size=-1>java.util.Vector</font></a></td>
</tr>
</table>
<p>
Nach dem Anlegen ist ein <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
zunächst leer, d.h. er enthält keine Elemente. Durch Aufruf
von <a name="ixa100870"><a href="index_i.html#ixb100678"><font color=#000080><tt>isEmpty</tt></font></a></a>
kann geprüft werden, ob ein <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
leer ist; <a name="ixa100871"><a href="index_s.html#ixb100679"><font color=#000080><tt>size</tt></font></a></a>
liefert die Anzahl der Elemente:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public final boolean isEmpty()
public final int size()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Vector.html" onClick="this.href=getApiDoc('java.util.Vector')"><font color="#660066" size=-1>java.util.Vector</font></a></td>
</tr>
</table>
<p>
Elemente können an beliebiger Stelle in die Liste eingefügt
werden. Ein <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
erlaubt die Speicherung beliebiger Objekttypen, denn die Einfüge-
und Zugriffsmethoden arbeiten mit Instanzen der Klasse <a href="index_o.html#ixb100224"><font color=#000080><tt>Object</tt></font></a>.
Da jede Klasse letztlich aus <a href="index_o.html#ixb100224"><font color=#000080><tt>Object</tt></font></a>
abgeleitet ist, können auf diese Weise beliebige Objekte in die
Liste eingefügt werden.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Leider ist der Zugriff auf die gespeicherten Elemente damit natürlich
nicht <i>typsicher</i>. Der Compiler kann nicht wissen, welche Objekte
an welcher Stelle im <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
gespeichert wurden, und geht daher davon aus, dass beim Zugriff auf
Elemente eine Instanz der Klasse <a href="index_o.html#ixb100224"><font color=#000080><tt>Object</tt></font></a>
geliefert wird. Mit Hilfe des Typkonvertierungsoperators muss diese
dann in das ursprüngliche Objekt zurückverwandelt werden.
Die Verantwortung für korrekte Typisierung liegt damit beim Entwickler.
Mit Hilfe des Operators <a name="ixa100872"><a href="index_i.html#ixb100330"><font color=#000080><tt>instanceof</tt></font></a></a>
kann bei Bedarf zumindest eine Laufzeit-Typüberprüfung vorgeschaltet
werden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
<tr>
<td><font color="#FFFFFF"> Warnung </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
Neue Elemente können wahlweise an das Ende des Vektors oder an
einer beliebigen anderen Stelle eingefügt werden. Das Einfügen
am Ende erfolgt mit der Methode <a name="ixa100873"><a href="index_a.html#ixb100187"><font color=#000080><tt>addElement</tt></font></a></a>:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void addElement(Object obj)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Vector.html" onClick="this.href=getApiDoc('java.util.Vector')"><font color="#660066" size=-1>java.util.Vector</font></a></td>
</tr>
</table>
<p>
In diesem Fall wird das Objekt <font color="#000077"><tt>obj</tt></font>
an das Ende der bisherigen Liste von Elementen angehängt.
<p>
Soll ein Element dagegen an einer beliebigen Stelle innerhalb der
Liste eingefügt werden, ist die Methode <a name="ixa100874"><a href="index_i.html#ixb100680"><font color=#000080><tt>insertElementAt</tt></font></a></a>
zu verwenden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void insertElementAt(Obj obj, int index)
throws ArrayIndexOutOfBoundsException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Vector.html" onClick="this.href=getApiDoc('java.util.Vector')"><font color="#660066" size=-1>java.util.Vector</font></a></td>
</tr>
</table>
<p>
Diese Methode fügt das Objekt <font color="#000077"><tt>obj</tt></font>
an der Position <font color="#000077"><tt>index</tt></font> in den
Vektor ein. Alle bisher an dieser oder einer dahinterliegenden Position
befindlichen Elemente werden um eine Position weitergeschoben.
<!-- Section -->
<a name="sectlevel3id014002002"></a>
<h3>14.2.2 Zugriff auf Elemente </h3>
<p>
Ein Vektor bietet sowohl <i>sequenziellen</i> als auch <i>wahlfreien</i>
Zugriff auf seine Elemente. Für den sequenziellen Zugriff bietet
es sich an, den im nachfolgenden Abschnitt beschriebenen <i>Iterator</i>
zu verwenden. Der wahlfreie Zugriff erfolgt mit einer der Methoden
<a name="ixa100875"><a href="index_f.html#ixb100681"><font color=#000080><tt>firstElement</tt></font></a></a>,
<a name="ixa100876"><a href="index_l.html#ixb100682"><font color=#000080><tt>lastElement</tt></font></a></a>
oder <a name="ixa100877"><a href="index_e.html#ixb100683"><font color=#000080><tt>elementAt</tt></font></a></a>:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public Object firstElement()
throws ArrayIndexOutOfBoundsException
public Object lastElement()
throws ArrayIndexOutOfBoundsException
public Object elementAt(int index)
throws ArrayIndexOutOfBoundsException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Vector.html" onClick="this.href=getApiDoc('java.util.Vector')"><font color="#660066" size=-1>java.util.Vector</font></a></td>
</tr>
</table>
<p>
<a href="index_f.html#ixb100681"><font color=#000080><tt>firstElement</tt></font></a>
liefert das erste Element, <a href="index_l.html#ixb100682"><font color=#000080><tt>lastElement</tt></font></a>
das letzte. Mit Hilfe von <a href="index_e.html#ixb100683"><font color=#000080><tt>elementAt</tt></font></a>
wird auf das Element an Position <font color="#000077"><tt>index</tt></font>
zugegriffen. Alle drei Methoden verursachen eine Ausnahme, wenn das
gesuchte Element nicht vorhanden ist.
<!-- Section -->
<a name="sectlevel3id014002003"></a>
<h3>14.2.3 Der Vektor als Iterator </h3>
<p>
Für den sequenziellen Zugriff auf die Elemente des Vektors steht
ein <i>Iterator</i> zur Verfügung. Ein Iterator ist eine Abstraktion
für den aufeinanderfolgenden Zugriff auf alle Elemente einer
komplexen Datenstruktur (siehe <a href="k100068.html#iteratorpattern">Abschnitt 10.4.5</a>.
Ein Iterator für die traditionellen Collection-Klassen wird in
Java durch das Interface <a name="ixa100878"><a href="index_e.html#ixb100122"><font color=#000080><tt>Enumeration</tt></font></a></a>
zur Verfügung gestellt und deshalb in der Java-Welt oft auch
als <i>Enumerator</i> bezeichnet.
<p>
Das Interface <a href="index_e.html#ixb100122"><font color=#000080><tt>Enumeration</tt></font></a>
besitzt die Methoden <a name="ixa100879"><a href="index_h.html#ixb100684"><font color=#000080><tt>hasMoreElements</tt></font></a></a>
und <a name="ixa100880"><a href="index_n.html#ixb100685"><font color=#000080><tt>nextElement</tt></font></a></a>.
Nach der Initialisierung zeigt ein <a href="index_e.html#ixb100122"><font color=#000080><tt>Enumeration</tt></font></a>-Objekt
auf das erste Element der Aufzählung. Durch Aufruf von <a href="index_h.html#ixb100684"><font color=#000080><tt>hasMoreElements</tt></font></a>
kann geprüft werden, ob weitere Elemente in der Aufzählung
enthalten sind, und <a href="index_n.html#ixb100685"><font color=#000080><tt>nextElement</tt></font></a>
setzt den internen Zeiger auf das nächste Element:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public boolean hasMoreElements()
public Object nextElement()
throws NoSuchElementException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Enumeration.html" onClick="this.href=getApiDoc('java.util.Enumeration')"><font color="#660066" size=-1>java.util.Enumeration</font></a></td>
</tr>
</table>
<p>
In der Klasse <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>
liefert die Methode <a name="ixa100881"><a href="index_e.html#ixb100686"><font color=#000080><tt>elements</tt></font></a></a>
einen Enumerator für alle Elemente, die sich im Vektor befinden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public Enumeration elements()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Enumeration.html" onClick="this.href=getApiDoc('java.util.Enumeration')"><font color="#660066" size=-1>java.util.Enumeration</font></a></td>
</tr>
</table>
<p>
Das folgende Beispiel verdeutlicht die Anwendung von <a href="index_e.html#ixb100686"><font color=#000080><tt>elements</tt></font></a>:
<a name="listingid014001"></a>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing1401.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
<font color="#555555">004 </font>
<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1401
<font color="#555555">006 </font>{
<font color="#555555">007 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">008 </font> {
<font color="#555555">009 </font> Vector v = <font color="#0000AA">new</font> Vector();
<font color="#555555">010 </font>
<font color="#555555">011 </font> v.addElement(<font color="#0000FF">"eins"</font>);
<font color="#555555">012 </font> v.addElement(<font color="#0000FF">"drei"</font>);
<font color="#555555">013 </font> v.insertElementAt(<font color="#0000FF">"zwei"</font>,1);
<font color="#555555">014 </font> <font color="#0000AA">for</font> (Enumeration el=v.elements(); el.hasMoreElements(); ) {
<font color="#555555">015 </font> System.out.println((String)el.nextElement());
<font color="#555555">016 </font> }
<font color="#555555">017 </font> }
<font color="#555555">018 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1401.java"><font color="#000055" size=-1>Listing1401.java</font></a></td>
</tr>
</table>
<i>
Listing 14.1: Die Methode elements der Klasse Vector</i></p>
<p>
Das Programm erzeugt einen <a href="index_v.html#ixb100120"><font color=#000080><tt>Vector</tt></font></a>,
fügt die Werte »eins«, »zwei« und »drei«
ein und gibt sie anschließend auf dem Bildschirm aus:
<font color="#333300">
<pre>
eins
zwei
drei
</pre>
</font>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Ein Enumerator ist immer dann nützlich, wenn die Elemente eines
zusammengesetzten Datentyps nacheinander aufgezählt werden sollen.
Enumeratoren werden in Java noch an verschiedenen anderen Stellen
zur Verfügung gestellt, beispielsweise in den Klassen <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
oder <a href="index_s.html#ixb100541"><font color=#000080><tt>StringTokenizer</tt></font></a>.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
<tr>
<td><font color="#FFFFFF"> Tipp </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
</tr>
</table>
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100091.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100093.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100097.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|