{"id":20370,"date":"2023-08-12T05:02:48","date_gmt":"2023-08-12T03:02:48","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=20370"},"modified":"2023-08-09T21:38:01","modified_gmt":"2023-08-09T19:38:01","slug":"java-sets-interface-eine-leistungsstarke-und-flexible-moeglichkeit-fuer-eindeutige-elemente","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=20370","title":{"rendered":"Java Sets (Interface): eine leistungsstarke und flexible M\u00f6glichkeit f\u00fcr eindeutige Elemente"},"content":{"rendered":"<p>Java <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/util\/Set.html\" rel=\"noopener\" target=\"_blank\">Sets<\/a> bieten eine leistungsstarke und flexible M\u00f6glichkeit, eindeutige Elemente zu speichern und damit umzugehen, ohne sich um die Verwaltung von Duplikaten k\u00fcmmern zu m\u00fcssen. Die Wahl der geeigneten <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/util\/Set.html\" rel=\"noopener\" target=\"_blank\">Set<\/a>-Implementierung h\u00e4ngt von den spezifischen Anforderungen Ihrer Anwendung ab. <\/p>\n<div style=\"width: 525px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-20370-1\" width=\"525\" height=\"295\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/herz-gitter.mp4?_=1\" \/><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/herz-gitter.mp4\">http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2023\/08\/herz-gitter.mp4<\/a><\/video><\/div>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/util\/Set.html\" rel=\"noopener\" target=\"_blank\">Set<\/a> ist eine Schnittstelle (Interface) in der Java-Programmiersprache, die eine Sammlung von eindeutigen, <strong>nicht doppelten<\/strong> Elementen repr\u00e4sentiert. Es gibt verschiedene Implementierungen von Sets in Java, darunter <strong>HashSet<\/strong>, <strong>LinkedHashSet<\/strong> und <strong>TreeSet<\/strong>. Die Verwendung von Java Sets bietet mehrere Vorteile:<!--more--><\/p>\n<p><strong>Eindeutigkeit<\/strong>: Ein Set erlaubt <strong>keine<\/strong> Duplikate. Wenn Sie sicherstellen m\u00f6chten, dass Ihre Daten keine doppelten Werte enthalten, ist ein Set eine effiziente Wahl.<\/p>\n<p><strong>Schnelle Suche<\/strong>: Sets sind f\u00fcr schnelle Suchvorg\u00e4nge optimiert. Die Implementierung HashSet verwendet beispielsweise Hashing, um die Suche nach Elementen in konstanter Zeit (O(1)) zu erm\u00f6glichen.<br \/>\n<strong><br \/>\nKeine festgelegte Reihenfolge<\/strong>: Wenn die Reihenfolge der Elemente keine Rolle spielt, bieten Sets den Vorteil, dass sie die Reihenfolge der Elemente nicht festlegen. Dies kann in Szenarien n\u00fctzlich sein, in denen die Reihenfolge keine Bedeutung hat und die Performance wichtiger ist.<\/p>\n<p><strong>Schnelle Einf\u00fcgungen und L\u00f6schungen<\/strong>: Sets bieten effiziente Operationen zum Hinzuf\u00fcgen (add) und Entfernen von Elementen. Die Zeitkomplexit\u00e4t f\u00fcr Einf\u00fcgungen und L\u00f6schungen h\u00e4ngt von der spezifischen Implementierung des Sets ab, ist jedoch oft sehr gering.<\/p>\n<p><strong>Schnittstellen<\/strong>: Da Set eine Schnittstelle ist, k\u00f6nnen Sie verschiedene Implementierungen je nach Ihren Anforderungen verwenden, ohne den Code zu \u00e4ndern. Dies erleichtert die Anpassung an unterschiedliche Performance- oder Verhaltensanforderungen.<\/p>\n<p><strong>Performance in speziellen F\u00e4llen<\/strong>: Die Implementierung <strong>TreeSet<\/strong> stellt sicher, dass die Elemente in aufsteigender Reihenfolge sortiert sind. Dies kann in F\u00e4llen n\u00fctzlich sein, in denen Sie Elemente in einer bestimmten Reihenfolge ben\u00f6tigen.<br \/>\n<strong><br \/>\nAnwendungen in Algorithmen<\/strong>: Sets werden in vielen Algorithmen und Datenverarbeitungsaufgaben verwendet, wie z.B. zur <strong>Suche nach Duplikaten<\/strong>, zur <strong>Pr\u00fcfung von Mitgliedschaft<\/strong> oder zur <strong>Entfernung von Duplikaten<\/strong> aus einer Liste.<\/p>\n<p>Hier mal ein kleines Beispiel:<\/p>\n<pre class=\"theme:dark-terminal lang:java decode:true \" >\r\nimport java.util.HashSet;\r\nimport java.util.Iterator;\r\nimport java.util.Set;\r\n\r\n\/**\r\n* Thomas Wenzlaff\r\n*\/\r\npublic class TestSet {\r\n\r\n\tprivate String name;\r\n\r\n\tpublic TestSet(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String toString() {\r\n\t\tStringBuilder builder = new StringBuilder();\r\n\t\tbuilder.append(\"TestSet [\");\r\n\t\tif (name != null) {\r\n\t\t\tbuilder.append(\"name=\");\r\n\t\t\tbuilder.append(name);\r\n\t\t}\r\n\t\tbuilder.append(\"]\");\r\n\t\treturn builder.toString();\r\n\t}\r\n\r\n\tpublic static void main(String[] args) {\r\n\r\n\t\tTestSet start = new TestSet(\"Erste Mindmap\");\r\n\t\tTestSet zweite = new TestSet(\"Zweite Mindmap\");\r\n\t\tTestSet nicht = new TestSet(\"nicht vorhandene Mindmap\");\r\n\r\n\t\tSet&lt;TestSet&gt; s = new HashSet&lt;&gt;();\r\n\t\t\/\/ SortedSet&lt;TestSet&gt; sortiertesSet = new TreeSet&lt;&gt;();\r\n\r\n\t\tboolean erg = s.add(start);\r\n\t\tif (erg) {\r\n\t\t\tSystem.out.println(\"erfolgreich Hinzugef\u00fcgt\" + start + \" zum Set\");\r\n\t\t}\r\n\t\terg = s.add(zweite);\r\n\t\tif (erg) {\r\n\t\t\tSystem.out.println(\"erfolgreich Hinzugef\u00fcgt \" + zweite + \" zum Set\");\r\n\t\t}\r\n\t\terg = s.add(zweite);\r\n\t\tif (!erg) {\r\n\t\t\tSystem.err.println(\"Im Set werden keine doppelten Objekt erlaubt.\");\r\n\t\t}\r\n\r\n\t\tSystem.out.println(\"Set: \" + s);\r\n\t\tSystem.out.println(\"Set Size: \" + s.size());\r\n\t\tSystem.out.println(\"Set contains: \" + s.contains(zweite));\r\n\t\tSystem.out.println(\"Set !contains: \" + s.contains(nicht));\r\n\t\tSystem.out.println(\"Set toArray 1. in Set ist Reihenfolge nicht def: \" + s.toArray()[1]);\r\n\r\n\t\tfor (Iterator&lt;TestSet&gt; iterator = s.iterator(); iterator.hasNext();) {\r\n\t\t\tTestSet testSet = iterator.next();\r\n\t\t\tSystem.out.println(\"Inhalt: \" + testSet.getName());\r\n\t\t}\r\n\t\tSystem.out.println(\"---------------------------\");\r\n\t\ts.stream().forEach(i -&gt; System.out.println(i.getName()));\r\n\t}\r\n}\r\n<\/pre>\n<p>Ergebnis:<\/p>\n<pre class=\"theme:dark-terminal lang:java decode:true \" >\r\nerfolgreich Hinzugef\u00fcgtTestSet [name=Erste Mindmap] zum Set\r\nerfolgreich Hinzugef\u00fcgt TestSet [name=Zweite Mindmap] zum Set\r\nIm Set werden keine doppelten Objekt erlaubt.\r\nSet: [TestSet [name=Zweite Mindmap], TestSet [name=Erste Mindmap]]\r\nSet Size: 2\r\nSet contains: true\r\nSet !contains: false\r\nSet toArray 1. in Set ist Reihenfolge nicht def: TestSet [name=Erste Mindmap]\r\nInhalt: Zweite Mindmap\r\nInhalt: Erste Mindmap\r\n---------------------------\r\nZweite Mindmap\r\nErste Mindmap \r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Java Sets bieten eine leistungsstarke und flexible M\u00f6glichkeit, eindeutige Elemente zu speichern und damit umzugehen, ohne sich um die Verwaltung von Duplikaten k\u00fcmmern zu m\u00fcssen. Die Wahl der geeigneten Set-Implementierung h\u00e4ngt von den spezifischen Anforderungen Ihrer Anwendung ab. Set ist eine Schnittstelle (Interface) in der Java-Programmiersprache, die eine Sammlung von eindeutigen, nicht doppelten Elementen repr\u00e4sentiert. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=20370\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eJava Sets (Interface): eine leistungsstarke und flexible M\u00f6glichkeit f\u00fcr eindeutige Elemente\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5],"tags":[5591,5590,4965,3901,2178,2182,5588,5589,5592],"class_list":["post-20370","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","tag-duplikate","tag-eindeutig","tag-hashset","tag-interface","tag-java","tag-programmierung","tag-set","tag-sets","tag-treeset"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/20370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20370"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/20370\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20370"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}