{"id":2220,"date":"2013-09-01T15:27:13","date_gmt":"2013-09-01T13:27:13","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2220"},"modified":"2013-09-01T15:27:13","modified_gmt":"2013-09-01T13:27:13","slug":"die-abstrakten-basisklassen-fr-container","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/die-abstrakten-basisklassen-fr-container\/","title":{"rendered":"Die abstrakten Basisklassen f&uuml;r Container"},"content":{"rendered":"<p>Das Designprinzip der Collection-Klassen folgt drei Stufen:<\/p>\n<ul>\n<li>Schnittstellen legen Gruppen von Operationen f\u00fcr die verschiedenen Beh\u00e4ltertypen fest. <\/li>\n<li>Abstrakte Basisklassen f\u00fchren die Operationen der Schnittstellen auf eine minimale Zahl von als abstrakt deklarierten Grundoperationen zur\u00fcck, etwa addAll() auf add() oder isEmpty() auf getSize(). <\/li>\n<li>Konkrete Klassen f\u00fcr bestimmte Beh\u00e4ltertypen beerben die entsprechende abstrakte Basisklasse und erg\u00e4nzen die unbedingt erforderlichen Grundoperationen (und einige die Performance steigernde Abk\u00fcrzungen gegen\u00fcber der allgemeinen L\u00f6sung in der Oberklasse). <\/li>\n<\/ul>\n<p>Es gibt eine Reihe von abstrakten Basisklassen, die den Containern eine Basisfunktionalit\u00e4t geben. Unter ihnen sind:<\/p>\n<h4>AbstractCollection<\/h4>\n<p>Implementiert die Methoden der Schnittstelle Collection ohne iterator() und size(). AbstractCollection ist Basisklasse von AbstractList und AbstractSet.<\/p>\n<h4>AbstractList<\/h4>\n<p>Erweitert AbstractCollection und implementiert die Schnittstelle List. F\u00fcr eine konkrete Klasse m\u00fcssen lediglich Methoden f\u00fcr get(int index) und size() implementiert werden. Soll die Liste auch Elemente aufnehmen, sollte sie auch set(int index, Object element) implementieren. Andernfalls bewirkt das Einf\u00fcgen von Elementen nur eine Unsupported OperationException. Die direkten Unterklassen sind AbstractSequentialList, ArrayList und Vector.<\/p>\n<h4>AbstractSequentialList<\/h4>\n<p>AbstractSequentialList erweitert AbstractList (und damit auch AbstractCollection) und bildet die Grundlage f\u00fcr die Klasse LinkedList. Im Gegensatz zur konkreten Klasse ArrayList bereitet AbstractSequentialList die Klasse LinkedList darauf vor, die Elemente in einer Liste zu verwalten und nicht wie ArrayList in einem internen Array.<\/p>\n<h4>AbstractSet<\/h4>\n<p>Erweitert AbstractCollection und implementiert die Schnittstelle Set. Die Klasse AbstractSet dient als Basis f\u00fcr die beiden Klassen HashSet und TreeSet. Es \u00fcberschreibt auch keine Methoden der Oberklasse AbstractCollection, sondern f\u00fcgt nur die Methode equals(Object) und hashCode() hinzu.<\/p>\n<h4>AbstractMap<\/h4>\n<p>Implementiert die Schnittstelle Map. Um eine konkrete Unterklasse zu erstellen, muss put() sinnvoll implementiert werden; ohne \u00dcberschriebenes put() folgt eine UnsupportedOperationException. F\u00fcr get(Object) gibt es eine Standard-Implementierung.<\/p>\n<p>Das Wissen um diese Basisimplementierung ist n\u00fctzlich, wenn eigene Datenstrukturen implementiert werden. Das passiert selten, findet man aber etwa bei Google Guava.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Designprinzip der Collection-Klassen folgt drei Stufen: Schnittstellen legen Gruppen von Operationen f\u00fcr die verschiedenen Beh\u00e4ltertypen fest. Abstrakte Basisklassen f\u00fchren die Operationen der Schnittstellen auf eine minimale Zahl von als abstrakt deklarierten Grundoperationen zur\u00fcck, etwa addAll() auf add() oder isEmpty() auf getSize(). Konkrete Klassen f\u00fcr bestimmte Beh\u00e4ltertypen beerben die entsprechende abstrakte Basisklasse und erg\u00e4nzen die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-2220","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2220"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2220\/revisions"}],"predecessor-version":[{"id":2221,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2220\/revisions\/2221"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}