diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100095.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100095.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100095.html | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100095.html b/Master/Reference Architectures and Patterns/hjp5/html/k100095.html new file mode 100644 index 0000000..7fc886b --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100095.html @@ -0,0 +1,297 @@ +<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,k100094.html;107,k100096.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="k100094.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100096.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="sectlevel2id014005"></a>
+<h2>14.5 Die Klasse BitSet </h2>
+<hr>
+<ul>
+<li><a href="k100095.html#sectlevel2id014005">14.5 Die Klasse BitSet</a>
+<ul>
+<li><a href="k100095.html#sectlevel3id014005001">14.5.1 Elementweise Operationen</a>
+<li><a href="k100095.html#sectlevel3id014005002">14.5.2 Mengenorientierte Operationen</a>
+</ul>
+</ul>
+<hr>
+
+<p>
+Die Klasse <a name="ixa100910"><a href="index_b.html#ixb100676"><font color=#000080><tt>BitSet</tt></font></a></a>
+dient dazu, <i>Mengen ganzer Zahlen</i> zu repräsentieren. Sie
+erlaubt es, Zahlen einzufügen oder zu löschen und zu testen,
+ob bestimmte Werte in der Menge enthalten sind. Die Klasse bietet
+zudem die Möglichkeit, Teil- und Vereinigungsmengen zu bilden.
+<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 <a href="index_b.html#ixb100676"><font color=#000080><tt>BitSet</tt></font></a>
+erlaubt aber auch noch eine andere Interpretation. Sie kann nämlich
+auch als eine Menge von Bits, die entweder gesetzt oder nicht gesetzt
+sein können, angesehen werden. In diesem Fall entspricht das
+Einfügen eines Elements dem Setzen eines Bits, das Entfernen
+dem Löschen und die Vereinigungs- und Schnittmengenoperationen
+den logischen ODER- bzw. UND-Operationen.</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>
+
+<p>
+Diese Analogie wird insbesondere dann deutlich, wenn man eine Menge
+von ganzen Zahlen in der Form repräsentiert, dass in einem booleschen
+Array das Element an Position <i>i</i> genau dann auf <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>
+gesetzt wird, wenn die Zahl <i>i</i> Element der repräsentierten
+Menge ist. Mit <a href="index_b.html#ixb100676"><font color=#000080><tt>BitSet</tt></font></a>
+bietet Java nun eine Klasse, die sowohl als Liste von Bits als auch
+als Menge von Ganzzahlen angesehen werden kann.
+
+<!-- Section -->
+
+<a name="sectlevel3id014005001"></a>
+<h3>14.5.1 Elementweise Operationen </h3>
+
+<p>
+Ein neues Objekt der Klasse <a href="index_b.html#ixb100676"><font color=#000080><tt>BitSet</tt></font></a>
+kann mit dem parameterlosen Konstruktor angelegt werden. Die dadurch
+repräsentierte Menge ist zunächst leer.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public BitSet()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/BitSet.html" onClick="this.href=getApiDoc('java.util.BitSet')"><font color="#660066" size=-1>java.util.BitSet</font></a></td>
+</tr>
+</table>
+
+<p>
+Das Einfügen einer Zahl (bzw. das Setzen eines Bits) erfolgt
+mit Hilfe der Methode <a name="ixa100911"><a href="index_s.html#ixb100181"><font color=#000080><tt>set</tt></font></a></a>.
+Das Entfernen einer Zahl (bzw. das Löschen eines Bits) erfolgt
+mit der Methode <a name="ixa100912"><a href="index_c.html#ixb100710"><font color=#000080><tt>clear</tt></font></a></a>.
+Die Abfrage, ob eine Zahl in der Menge enthalten ist (bzw. die Abfrage
+des Zustands eines bestimmten Bits), erfolgt mit Hilfe der Methode
+<a name="ixa100913"><a href="index_g.html#ixb100699"><font color=#000080><tt>get</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 set(int bit)
+
+public void clear(int bit)
+
+public boolean get(int bit)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/BitSet.html" onClick="this.href=getApiDoc('java.util.BitSet')"><font color="#660066" size=-1>java.util.BitSet</font></a></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id014005002"></a>
+<h3>14.5.2 Mengenorientierte Operationen </h3>
+
+<p>
+Die mengenorientierten Operationen benötigen zwei Mengen als
+Argumente, nämlich das aktuelle Objekt und eine weitere Menge,
+die als Parameter übergeben wird. Das Ergebnis der Operation
+wird dem aktuellen Objekt zugewiesen. Das Bilden der Vereinigungsmenge
+(bzw. die bitweise ODER-Operation) erfolgt durch Aufruf der Methode
+<a name="ixa100914"><a href="index_o.html#ixb100711"><font color=#000080><tt>or</tt></font></a></a>,
+das Bilden der Durchschnittsmenge (bzw. die bitweise UND-Operation)
+mit Hilfe von <a name="ixa100915"><a href="index_a.html#ixb100712"><font color=#000080><tt>and</tt></font></a></a>.
+Zusätzlich gibt es die Methode <a name="ixa100916"><a href="index_x.html#ixb100713"><font color=#000080><tt>xor</tt></font></a></a>,
+die ein bitweises Exklusiv-ODER durchführt. Deren mengentheoretisches
+Äquivalent ist die Vereinigung von Schnittmenge und Schnittmenge
+der Umkehrmengen.
+<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>
+Seit dem JDK 1.2 gibt es zusätzlich die Methode <a name="ixa100917"><a href="index_a.html#ixb100714"><font color=#000080><tt>andNot</tt></font></a></a>,
+mit der die Bits der Ursprungsmenge gelöscht werden, deren korrespondierendes
+Bit in der Argumentmenge gesetzt ist.</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"> JDK1.1-6.0 </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% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void or(BitSet set)
+
+public void and(BitSet set)
+
+public void xor(BitSet set)
+
+public void andNot(BitSet set)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/BitSet.html" onClick="this.href=getApiDoc('java.util.BitSet')"><font color="#660066" size=-1>java.util.BitSet</font></a></td>
+</tr>
+</table>
+
+<p>
+Das folgende Programm verdeutlicht die Anwendung der Klasse <a href="index_b.html#ixb100676"><font color=#000080><tt>BitSet</tt></font></a>
+am Beispiel der Konstruktion der Menge der Primzahlen kleiner gleich
+20. Dabei werden besagte Primzahlen einfach als Menge <i>X</i> der
+natürlichen Zahlen bis 20 angesehen, bei der jedes Element keinen
+echten Teiler in <i>X</i> enthält:
+<a name="listingid014004"></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">/* Listing1404.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> Listing1404
+<font color="#555555">006 </font>{
+<font color="#555555">007 </font> <font color="#0000AA">private</font> <font color="#0000AA">final</font> <font color="#0000AA">static</font> <font color="#006699">int</font> MAXNUM = 20;
+<font color="#555555">008 </font>
+<font color="#555555">009 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">010 </font> {
+<font color="#555555">011 </font> BitSet b;
+<font color="#555555">012 </font> <font color="#006699">boolean</font> ok;
+<font color="#555555">013 </font>
+<font color="#555555">014 </font> System.out.println(<font color="#0000FF">"Die Primzahlen <= "</font> + MAXNUM + <font color="#0000FF">":"</font>);
+<font color="#555555">015 </font> b = <font color="#0000AA">new</font> BitSet();
+<font color="#555555">016 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> i = 2; i <= MAXNUM; ++i) {
+<font color="#555555">017 </font> ok = <font color="#006699">true</font>;
+<font color="#555555">018 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> j = 2; j < i; ++j) {
+<font color="#555555">019 </font> <font color="#0000AA">if</font> (b.get(j) && i % j == 0) {
+<font color="#555555">020 </font> ok = <font color="#006699">false</font>;
+<font color="#555555">021 </font> <font color="#0000AA">break</font>;
+<font color="#555555">022 </font> }
+<font color="#555555">023 </font> }
+<font color="#555555">024 </font> <font color="#0000AA">if</font> (ok) {
+<font color="#555555">025 </font> b.set(i);
+<font color="#555555">026 </font> }
+<font color="#555555">027 </font> }
+<font color="#555555">028 </font> <font color="#0000AA">for</font> (<font color="#006699">int</font> i = 1; i <= MAXNUM; ++i) {
+<font color="#555555">029 </font> <font color="#0000AA">if</font> (b.get(i)) {
+<font color="#555555">030 </font> System.out.println(<font color="#0000FF">" "</font> + i);
+<font color="#555555">031 </font> }
+<font color="#555555">032 </font> }
+<font color="#555555">033 </font> }
+<font color="#555555">034 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1404.java"><font color="#000055" size=-1>Listing1404.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 14.4: Konstruktion von Primzahlen mit der Klasse BitSet</i></p>
+
+<p>
+Die Ausgabe des Programms ist:
+<font color="#333300">
+<pre>
+Die Primzahlen <= 20:
+ 2
+ 3
+ 5
+ 7
+ 11
+ 13
+ 17
+ 19
+</pre>
+</font>
+<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="k100094.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100096.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>
|
