{"id":130,"date":"2007-09-19T16:04:19","date_gmt":"2007-09-19T15:04:19","guid":{"rendered":"http:\/\/www.sahits.ch\/blog\/?p=130"},"modified":"2009-01-05T16:23:53","modified_gmt":"2009-01-05T15:23:53","slug":"datenstrukturen-in-java","status":"publish","type":"post","link":"http:\/\/sahits.ch\/blog\/blog\/2007\/09\/19\/datenstrukturen-in-java\/","title":{"rendered":"Datenstrukturen in Java"},"content":{"rendered":"<p>Datenstrukturen und Java klingt im ersten Moment nach einem Widerspruch: Java hat Objekte und keine Strukturen. Bei n\u00e4herer Betrachtung sieht man jedoch, dass die vermeintlichen Datenstrukturen zumindest in C++ als Klassen und somit als Objekte realisiert sind &#8211; alleine die Bezeichnung ist noch ein \u00c3\u0153berbleibsel aus prozeduralen C-Zeiten.<br \/>\nWir k\u00f6nnen also festhalten, dass eine Datenstruktur Attribute und Funktionen hat (um die Sprache m\u00f6glichst neutral zu halten). Unterschiedliche Datenstrukturen haben unterschiedliche Attribute und Funktionen. Dies steht im Gegensatz zum objektorientierten Ansatz der Wiederverwendung von Objekten.<br \/>\nJava bietet von Haus aus bereits ein grosses Repertoire (JDK) wo man mit C++ die STL bem\u00fchen muss. So l\u00e4sst sich in Java eine FIFO Queue bereits durch die Klassendefinition und dem \u00dcberschreiben von remove vollst\u00e4ndig implementieren:<\/p>\n<pre>\r\npublic class FIFOList extends LinkedList implements Queue{\r\n    public Object remove() {\r\n        return remove(0);\r\n    }\r\n}\r\n<\/pre>\n<p>Beispiel von: <a href=\"http:\/\/blog.taragana.com\/index.php\/archive\/fifo-list-in-java\/\">Simple Thoughts<\/a><br \/>\nWenn ich jedoch den durch die Struktur beschriebenen Funktionsumfang anschaue muss ich feststellen, dass die Funktionalit\u00e4t zwar der einer FIFO Queue entspricht, aber bereits die Methodennamen leicht verwirrlich sind. Zudem gibt es zahlreiche Funktionen, die mit einer FiFo Queue nichts zu tun haben. Ein C++ Entwickler, der nur die Signaturen sieht kann nicht erkennen, worum es sich handelt. Zudem weiss ich mit einer solchen Umsetzung nicht wie die Queue funktioniert.<br \/>\nAus diesem Grund habe ich die <a href=\"http:\/\/en.wikipedia.org\/wiki\/FIFO\">C++ Implementation<\/a> genommen, sie f\u00fcr Java angepasst und mit einigen convenient Methoden erg\u00e4nzt:<\/p>\n<pre>\r\npublic class FiFoQueue<t> {\r\n\tprivate FiFoNode<\/t><t> first=null;\r\n\tprivate FiFoNode<\/t><t> last=first;\r\n\tpublic FiFoQueue(){\t\t\r\n\t}\r\n\t\/\/ Put a new elemnt in the queue\r\n\tpublic void enqueue(T element){\r\n\t\tFiFoNode<\/t><t> temp = new FiFoNode<\/t><t>();\r\n\t\ttemp.value=element;\r\n\t\ttemp.next=last;\r\n\t\tlast=temp;\r\n\t}\r\n\t\/\/ Get the element from the queue that is in front\r\n\tpublic T dequeue(){\r\n\t\tFiFoNode<\/t><t> temp = first;\r\n\t\tfirst=first.next;\r\n\t\treturn temp.value;\r\n\t}\r\n\t\/\/ Check if the queue is empty\r\n\tpublic boolean isEmpty(){\r\n\t\treturn first==last && first==null;\r\n\t}\r\n\t\/\/ Empty the queue\r\n\tpublic void empty(){\r\n\t\tfirst=last=null;\r\n\t}\r\n\tclass FiFoNode<\/t><t>{\r\n\t\tFiFoNode<\/t><t> next;\r\n\t\tT value;\r\n\t\tFiFoNode(){\r\n\t\t}\r\n\t}\r\n}\r\n<\/t><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Datenstrukturen und Java klingt im ersten Moment nach einem Widerspruch: Java hat Objekte und keine Strukturen. Bei n\u00e4herer Betrachtung sieht man jedoch, dass die vermeintlichen Datenstrukturen zumindest in C++ als Klassen und somit als Objekte realisiert sind &#8211; alleine die Bezeichnung ist noch ein \u00c3\u0153berbleibsel aus prozeduralen C-Zeiten. Wir k\u00f6nnen also festhalten, dass eine Datenstruktur &hellip; <a href=\"http:\/\/sahits.ch\/blog\/blog\/2007\/09\/19\/datenstrukturen-in-java\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eDatenstrukturen in Java\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,6],"tags":[19,99,20,301,21,15],"class_list":["post-130","post","type-post","status-publish","format-standard","hentry","category-java","category-programmieren","tag-datenstruktur","tag-de","tag-fifo","tag-java","tag-queue","tag-source-code"],"_links":{"self":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/comments?post=130"}],"version-history":[{"count":4,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/130\/revisions"}],"predecessor-version":[{"id":439,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/130\/revisions\/439"}],"wp:attachment":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/media?parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/categories?post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/tags?post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}