summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100094.html
blob: c723d9046535c2857f3df7870d664ec72cc82c4b (plain)
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
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
<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,k100093.html;107,k100095.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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100093.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100095.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100097.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 14 - Collections I
</table>
<hr>


<!-- Section -->
<a name="klassehashtable"></a>
<h2>14.4 Die Klasse Hashtable </h2>
<hr>
<ul>
<li><a href="k100094.html#klassehashtable">14.4 Die Klasse Hashtable</a>
<ul>
<li><a href="k100094.html#sectlevel3id014004001">14.4.1 Einf&uuml;gen von Elementen</a>
<li><a href="k100094.html#sectlevel3id014004002">14.4.2 Zugriff auf Elemente</a>
<li><a href="k100094.html#sectlevel3id014004003">14.4.3 Hashtable als Iterator</a>
<li><a href="k100094.html#properties">14.4.4 Die Klasse Properties</a>
</ul>
</ul>
<hr>

<p>
Die Klasse <a name="ixa100891"><a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a></a>
ist eine Konkretisierung der abstrakten Klasse <a name="ixa100892"><a href="index_d.html#ixb100675"><font color=#000080><tt>Dictionary</tt></font></a></a>.
Diese stellt einen <i>assoziativen</i> Speicher dar, der <i>Schl&uuml;ssel</i>
auf <i>Werte</i> abbildet und &uuml;ber den Schl&uuml;sselbegriff
einen effizienten Zugriff auf den Wert erm&ouml;glicht. Ein Dictionary
speichert also immer zusammengeh&ouml;rige Paare von Daten, bei denen
der Schl&uuml;ssel als Name des zugeh&ouml;rigen Wertes angesehen
werden kann. &Uuml;ber den Schl&uuml;ssel kann sp&auml;ter der Wert
leicht wiedergefunden werden. 

<p>
Da ein Dictionary auf unterschiedliche Weise implementiert werden
kann, haben die Java-Designer entschieden, dessen abstrakte Eigenschaften
in einer Basisklasse zusammenzufassen. Die Implementierung <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
benutzt das Verfahren der <a name="ixa100893"><i>Schl&uuml;sseltransformation</i></a>,
also die Verwendung einer Transformationsfunktion (auch <a name="ixa100894"><i>Hash-Funktion</i></a>
genannt), zur Abbildung von Schl&uuml;sseln auf Indexpositionen eines
Arrays. Weitere Konkretisierungen der Klasse <a href="index_d.html#ixb100675"><font color=#000080><tt>Dictionary</tt></font></a>,
etwa auf der Basis bin&auml;rer B&auml;ume, gibt es in Java derzeit
nicht. 

<p>
Neben den erw&auml;hnten abstrakten Eigenschaften besitzt <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
noch die konkreten Merkmale <i>Kapazit&auml;t</i> und <i>Ladefaktor</i>.
Die Kapazit&auml;t gibt die Anzahl der Elemente an, die insgesamt
untergebracht werden k&ouml;nnen. Der Ladefaktor zeigt dagegen an,
bei welchem F&uuml;llungsgrad die Hash-Tabelle vergr&ouml;&szlig;ert
werden muss. Das Vergr&ouml;&szlig;ern erfolgt automatisch, wenn die
Anzahl der Elemente innerhalb der Tabelle gr&ouml;&szlig;er ist als
das Produkt aus Kapazit&auml;t und Ladefaktor. Seit dem JDK 1.2 darf
der Ladefaktor auch gr&ouml;&szlig;er als 1 sein. In diesem Fall wird
die <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
also erst dann vergr&ouml;&szlig;ert, wenn der F&uuml;llungsgrad gr&ouml;&szlig;er
als 100 % ist und bereits ein Teil der Elemente in den &Uuml;berlaufbereichen
untergebracht wurde. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Wichtig bei der Verwendung der <a href="index_d.html#ixb100675"><font color=#000080><tt>Dictionary</tt></font></a>-Klassen
ist, dass das Einf&uuml;gen und der Zugriff auf Schl&uuml;ssel nicht
auf der Basis des Operators <font color="#000077"><tt>==</tt></font>,
sondern mit Hilfe der Methode <a name="ixa100895"><a href="index_e.html#ixb100223"><font color=#000080><tt>equals</tt></font></a></a>
erfolgt. Schl&uuml;ssel m&uuml;ssen daher lediglich <i>inhaltlich</i>
gleich sein, um als identisch angesehen zu werden. Eine Referenzgleichheit
ist dagegen nicht erforderlich.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id014004001"></a>
<h3>14.4.1 Einf&uuml;gen von Elementen </h3>

<p>
Eine Instanz der Klasse <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
kann mit Hilfe eines parameterlosen Konstruktors angelegt werden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public Hashtable()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Hashtable.html" onClick="this.href=getApiDoc('java.util.Hashtable')"><font color="#660066" size=-1>java.util.Hashtable</font></a></td>
</tr>
</table>

<p>
Das Einf&uuml;gen von Elementen erfolgt durch Aufruf der Methode <a name="ixa100896"><a href="index_p.html#ixb100698"><font color=#000080><tt>put</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 put(Object key, Object value)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Hashtable.html" onClick="this.href=getApiDoc('java.util.Hashtable')"><font color="#660066" size=-1>java.util.Hashtable</font></a></td>
</tr>
</table>

<p>
Dieser Aufruf f&uuml;gt das Schl&uuml;ssel-Werte-Paar <i>(key, value)</i>
in die <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
ein. Weder <i>key</i> noch <i>value</i> d&uuml;rfen dabei <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>
sein. Falls bereits ein Wertepaar mit dem Schl&uuml;ssel <i>key</i>
enthalten ist, wird der bisherige Wert gegen den neuen ausgetauscht,
und <a href="index_p.html#ixb100698"><font color=#000080><tt>put</tt></font></a>
liefert in diesem Fall den Wert zur&uuml;ck, der bisher dem Schl&uuml;ssel
zugeordnet war. Falls der Schl&uuml;ssel bisher noch nicht vorhanden
ist, ist der R&uuml;ckgabewert <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>.


<!-- Section -->
<a name="sectlevel3id014004002"></a>
<h3>14.4.2 Zugriff auf Elemente </h3>

<p>
Der Zugriff auf ein Element erfolgt mit Hilfe der Methode <a name="ixa100897"><a href="index_g.html#ixb100699"><font color=#000080><tt>get</tt></font></a></a>
&uuml;ber den ihm zugeordneten Schl&uuml;ssel. <a href="index_g.html#ixb100699"><font color=#000080><tt>get</tt></font></a>
erwartet ein Schl&uuml;sselobjekt und liefert den dazu passenden Wert.
Falls der angegebene Schl&uuml;ssel nicht enthalten war, ist der R&uuml;ckgabewert
<a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></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 get(Object key)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Hashtable.html" onClick="this.href=getApiDoc('java.util.Hashtable')"><font color="#660066" size=-1>java.util.Hashtable</font></a></td>
</tr>
</table>

<p>
Zus&auml;tzlich zu den bisher erw&auml;hnten Methoden gibt es noch
zwei weitere mit den Namen <a name="ixa100898"><a href="index_c.html#ixb100700"><font color=#000080><tt>contains</tt></font></a></a>
und <a name="ixa100899"><a href="index_c.html#ixb100701"><font color=#000080><tt>containsKey</tt></font></a></a>.
Sie &uuml;berpr&uuml;fen, ob ein bestimmter Wert bzw. ein bestimmter
Schl&uuml;ssel in der <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
enthalten ist: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public boolean contains(Object value)
public boolean containsKey(Object key)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Hashtable.html" onClick="this.href=getApiDoc('java.util.Hashtable')"><font color="#660066" size=-1>java.util.Hashtable</font></a></td>
</tr>
</table>

<p>
Der R&uuml;ckgabewert ist <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>,
falls das gesuchte Element enthalten ist, andernfalls ist er <a href="index_f.html#ixb100234"><font color=#000080><tt>false</tt></font></a>.
Bei der Verwendung dieser Funktionen ist zu beachten, dass die Suche
nach einem Wert wahrscheinlich viel ineffizienter ist als die Suche
nach einem Schl&uuml;ssel. W&auml;hrend der Schl&uuml;ssel &uuml;ber
die Transformationsfunktion sehr schnell gefunden wird, erfordert
die Suche nach einem Wert einen sequenziellen Durchlauf durch die
Tabelle. 

<!-- Section -->

<a name="sectlevel3id014004003"></a>
<h3>14.4.3 Hashtable als Iterator </h3>

<p>
In der Klasse <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
gibt es zwei Iteratoren, die zur Auflistung von Schl&uuml;sseln und
Werten verwendet werden k&ouml;nnen: 
<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()
public Enumeration keys()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Hashtable.html" onClick="this.href=getApiDoc('java.util.Hashtable')"><font color="#660066" size=-1>java.util.Hashtable</font></a></td>
</tr>
</table>

<p>
Die Methode <a name="ixa100900"><a href="index_e.html#ixb100686"><font color=#000080><tt>elements</tt></font></a></a>
liefert einen Iterator f&uuml;r die Auflistung aller Werte in der
<a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>.
In welcher Reihenfolge die Elemente dabei durchlaufen werden, ist
nicht definiert. Da eine Hash-Funktion die Eigenschaft hat, Schl&uuml;ssel
gleichm&auml;&szlig;ig &uuml;ber den verf&uuml;gbaren Speicher zu
verteilen, ist davon auszugehen, dass die Iteratoren ihre R&uuml;ckgabewerte
in einer zuf&auml;lligen Reihenfolge liefern. 

<p>
Analog zu <a href="index_e.html#ixb100686"><font color=#000080><tt>elements</tt></font></a>
liefert <a name="ixa100901"><a href="index_k.html#ixb100702"><font color=#000080><tt>keys</tt></font></a></a>
eine Auflistung aller Schl&uuml;ssel, die sich in der Hash-Tabelle
befinden. Wie &uuml;blich liefern beide Methoden ein Objekt, welches
das Interface <a href="index_e.html#ixb100122"><font color=#000080><tt>Enumeration</tt></font></a>
implementiert. Wie zuvor erkl&auml;rt, erfolgt der Zugriff daher mit
Hilfe der Methoden <a href="index_h.html#ixb100684"><font color=#000080><tt>hasMoreElements</tt></font></a>
und <a href="index_n.html#ixb100685"><font color=#000080><tt>nextElement</tt></font></a>.

<p>
Das folgende Beispiel verdeutlicht die Anwendung einer <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>:
<a name="hashtableiterator"></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">/* Listing1403.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> Listing1403
<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>    Hashtable h = <font color="#0000AA">new</font> Hashtable();
<font color="#555555">010 </font>
<font color="#555555">011 </font>    <font color="#00AA00">//Pflege der Aliase</font>
<font color="#555555">012 </font>    h.put(<font color="#0000FF">"Fritz"</font>,<font color="#0000FF">"f.mueller@test.de"</font>);
<font color="#555555">013 </font>    h.put(<font color="#0000FF">"Franz"</font>,<font color="#0000FF">"fk@b-blabla.com"</font>);
<font color="#555555">014 </font>    h.put(<font color="#0000FF">"Paula"</font>,<font color="#0000FF">"user0125@mail.uofm.edu"</font>);
<font color="#555555">015 </font>    h.put(<font color="#0000FF">"Lissa"</font>,<font color="#0000FF">"lb3@gateway.fhdto.northsurf.dk"</font>);
<font color="#555555">016 </font>
<font color="#555555">017 </font>    <font color="#00AA00">//Ausgabe</font>
<font color="#555555">018 </font>    Enumeration e = h.keys();
<font color="#555555">019 </font>    <font color="#0000AA">while</font> (e.hasMoreElements()) {
<font color="#555555">020 </font>      String alias = (String)e.nextElement();
<font color="#555555">021 </font>      System.out.println(
<font color="#555555">022 </font>        alias + <font color="#0000FF">" --&gt; "</font> + h.get(alias)
<font color="#555555">023 </font>      );
<font color="#555555">024 </font>    }
<font color="#555555">025 </font>  }
<font color="#555555">026 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1403.java"><font color="#000055" size=-1>Listing1403.java</font></a></td>
</tr>
</table>
<i>
Listing 14.3: Anwendung der Klasse Hashtable</i></p>

<p>
Das Programm legt eine leere <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
an, die zur Aufnahme von Mail-Aliasen verwendet werden soll. Dazu
soll zu jeder E-Mail-Adresse ein kurzer Aliasname gepflegt werden,
unter dem die lange Adresse sp&auml;ter angesprochen werden kann.
Das Programm legt zun&auml;chst die Aliase &#187;Fritz&#171;, &#187;Franz&#171;,
&#187;Paula&#171; und &#187;Lissa&#171; an und assoziiert jeden mit
der zugeh&ouml;rigen E-Mail-Adresse. Anschlie&szlig;end durchl&auml;uft
es alle Schl&uuml;ssel und gibt zu jedem den dazu passenden Wert aus.
Die Ausgabe des Programms ist: 
<font color="#333300">
<pre>
Lissa --&gt; lb3@gateway.fhdto.northsurf.dk
Paula --&gt; user0125@mail.uofm.edu
Franz --&gt; fk@b-blabla.com
Fritz --&gt; f.mueller@test.de
</pre>
</font>


<!-- Section -->
<a name="properties"></a>
<h3>14.4.4 Die Klasse Properties </h3>

<p>
Die Klasse <a name="ixa100902"><a href="index_p.html#ixb100703"><font color=#000080><tt>Properties</tt></font></a></a>
ist aus <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
abgeleitet und repr&auml;sentiert ein auf <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>-Paare
spezialisiertes Dictionary, das es erlaubt, seinen Inhalt auf einen
externen Datentr&auml;ger zu speichern oder von dort zu laden. Ein
solches Objekt wird auch als <i>Property-Liste</i> (oder <i>Eigenschaften-Liste</i>)
bezeichnet. Zur Instanzierung stehen zwei Konstruktoren zur Verf&uuml;gung:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public Properties()
public Properties(Properties defaults)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Properties.html" onClick="this.href=getApiDoc('java.util.Properties')"><font color="#660066" size=-1>java.util.Properties</font></a></td>
</tr>
</table>

<p>
Der erste legt eine leere Property-Liste an, der zweite f&uuml;llt
sie mit den &uuml;bergebenen Default-Werten. Der Zugriff auf die einzelnen
Elemente erfolgt mit den Methoden <a name="ixa100903"><a href="index_g.html#ixb100704"><font color=#000080><tt>getProperty</tt></font></a></a>
und <a name="ixa100904"><a href="index_p.html#ixb100705"><font color=#000080><tt>propertyNames</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 String getProperty(String key)
public String getProperty(String key, String defaultValue)

public Enumeration propertyNames()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Properties.html" onClick="this.href=getApiDoc('java.util.Properties')"><font color="#660066" size=-1>java.util.Properties</font></a></td>
</tr>
</table>

<p>
Die erste Variante von <a href="index_g.html#ixb100704"><font color=#000080><tt>getProperty</tt></font></a>
liefert die Eigenschaft mit der Bezeichnung <font color="#000077"><tt>key</tt></font>.
Ist sie nicht vorhanden, wird <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>
zur&uuml;ckgegeben. Die zweite Variante hat dieselbe Aufgabe, gibt
aber den Standardwert <font color="#000077"><tt>defaultValue</tt></font>
zur&uuml;ck, wenn die gesuchte Eigenschaft nicht gefunden wurde. Mit
<a href="index_p.html#ixb100705"><font color=#000080><tt>propertyNames</tt></font></a>
kann ein <a href="index_e.html#ixb100122"><font color=#000080><tt>Enumeration</tt></font></a>-Objekt
beschafft werden, mit dem alle Eigenschaften der Property-Liste aufgez&auml;hlt
werden k&ouml;nnen. 

<p>
Zum Speichern einer Property-Liste steht die Methode <a name="ixa100905"><a href="index_s.html#ixb100706"><font color=#000080><tt>store</tt></font></a></a>
zur Verf&uuml;gung: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void store(OutputStream out, String header)
  throws IOException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Properties.html" onClick="this.href=getApiDoc('java.util.Properties')"><font color="#660066" size=-1>java.util.Properties</font></a></td>
</tr>
</table>

<p>
Sie erwartet einen <a href="index_o.html#ixb100673"><font color=#000080><tt>OutputStream</tt></font></a>
als Ausgabeger&auml;t (siehe <a href="k100125.html#kapitelbytestreams">Kapitel 19</a>)
und einen Header-<a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>,
der als Kommentar in die Ausgabedatei geschrieben wird. 

<p>
Das Gegenst&uuml;ck zu <a href="index_s.html#ixb100706"><font color=#000080><tt>store</tt></font></a>
ist <a name="ixa100906"><a href="index_l.html#ixb100707"><font color=#000080><tt>load</tt></font></a></a>.
Mit ihr kann eine Property-Datei eingelesen werden: 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void load(InputStream in)
  throws IOException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/util/Properties.html" onClick="this.href=getApiDoc('java.util.Properties')"><font color="#660066" size=-1>java.util.Properties</font></a></td>
</tr>
</table>

<p>
Hier muss ein <a href="index_i.html#ixb100642"><font color=#000080><tt>InputStream</tt></font></a>
&uuml;bergeben werden (siehe ebenfalls <a href="k100125.html#kapitelbytestreams">Kapitel 19</a>),
der die Daten der Property-Liste zur Verf&uuml;gung stellt. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Im JDK 1.1 wurde statt der Methode <a href="index_s.html#ixb100706"><font color=#000080><tt>store</tt></font></a>
die Methode <a name="ixa100907"><a href="index_s.html#ixb100708"><font color=#000080><tt>save</tt></font></a></a>
zum Speichern einer Property-Liste verwendet. Diese hatte dieselbe
Signatur, l&ouml;ste aber bei I/O-Problemen keine <a name="ixa100908"><a href="index_i.html#ixb100709"><font color=#000080><tt>IOException</tt></font></a></a>
aus. Mit dem JDK 1.2 wurde <a href="index_s.html#ixb100708"><font color=#000080><tt>save</tt></font></a>
als <a name="ixa100909"><a href="index_d.html#ixb100161"><font color=#000080><tt>deprecated</tt></font></a></a>
deklariert und durch <a href="index_s.html#ixb100706"><font color=#000080><tt>store</tt></font></a>
ersetzt.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
<tr>
<td><font color="#FFFFFF">&nbsp;JDK1.1-6.0&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Property-Dateien sind Textdateien mit einem recht einfachen Aufbau.
Je Zeile enthalten sie einen Schl&uuml;ssel und den zugeh&ouml;rigen
Wert. Beide sind durch ein Gleichheitszeichen voneinander getrennt.
Falls das erste nicht-leere Zeichen einer Zeile ein &#187;#&#171;
oder &#187;!&#171; ist, wird die gesamte Zeile als Kommentar angesehen
und beim Einlesen ignoriert. Zus&auml;tzlich sind einige Escape-Zeichen
wie \t, \n, \r, \\, \" oder \' erlaubt, und es gibt die M&ouml;glichkeit,
sehr lange Schl&uuml;ssel-Wert-Paare auf mehrere Zeilen zu verteilen.
Weitere Details k&ouml;nnen in der API-Dokumentation der Methoden
<a href="index_l.html#ixb100707"><font color=#000080><tt>load</tt></font></a>
und <a href="index_s.html#ixb100706"><font color=#000080><tt>store</tt></font></a>
nachgelesen werden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>

<p>
Wir wollen an dieser Stelle die Betrachtung der Klasse <a href="index_p.html#ixb100703"><font color=#000080><tt>Properties</tt></font></a>
abschlie&szlig;en. Ein weiteres Beispiel zu ihrer Verwendung findet
sich in <a href="k100110.html#systemproperties">Abschnitt 16.3.1</a>.
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100093.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100095.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100097.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>