wiJCollections – Java Collections API für JavaScript

By | 30. Oktober 2013

Viel Zeit ist seit dem letzten Post vergangen. Fast ein Jahr und viel hat sich getan. Viele Projekte mit interessanten Erkenntnissen, Erfahrungen und immer wieder kehrende Problemstellungen. Beispiel: effiziente Datenstrukturen. Die Fragen: Wie speichere ich am besten? Wie lese ich performant Daten  wieder aus? Wie greife ich schnell auf konkrete Werte zu, ohne unnötige Iterationen? Die / eine Lösung: eine API, die simpel, generisch und effizient arbeitet. Und hier habe ich mich mal dran gemacht und wiJCollections entworfen. Eine Java Collection API für JavaScript, die sich mit der Problematik beschäftigt.

wiJCollections?

wiJCollections ist ein Framework, dass sich die Java Collection API als Vorbild genommen hat und versucht auf JavaScript zu portieren. Aktuell setzt es ausschließlich auf RequireJS auf und bietet Support ab IE8+ (mit Polyfills). Es gibt allerdings auch einen Branch, der selbst ohne RequireJS arbeitet. Dabei wird nur eine einzige Datei eingebunden (unter dist/wijcollections.min.js) und es kann losgelegt werden.

Aber warum sollte ich … ?

Wirkliche Datenstrukturen gibt es in JS per se nicht. Man kann sich ein Array nehmen, oder vielleicht ein Objekt und dann fancy Sachen damit veranstalten: wild umher iterieren zum befüllen und durchsuchen. Die Laufzeit steigt, gerade wenn man innerhalb von Arrays bestimmte Objekte sucht. „Dann nehm‘ ich halt ein Objekt“, magst du jetzt denken. Nachteil allerdings: nur Arrays haben eine garantierte Sortierung, Objekte nicht. Und die Ordnung ist ja manchmal ganz brauchbar 🙂 Außerdem: wie findet man Objekte die intern keine ID oder Ähnliches haben, die eine Identifizierung „einfach“ macht? Dem Problem nimmt sich wiJCollections an.

Wie nutze ich wiJCollections denn?

wiJCollections ist eine wachsende API, welche verschiedene aus Java bekannte Collections, also eine Art Container oder Sammlung, bietet. Dabei übernimmt sie Verantwortung für die Elemente die übergeben werden und bietet einfachste Schnittstellen um darauf zuzugreifen. Ein Beispiel wäre das hinzufügen, entfernen oder durchsuchen einer Collection – und zwar so effizient wie möglich.

Aber machen wir erstmal ein Beispiel, wie es auf herkömmlichen Weg aussehen könnte …

Unkool! Wir haben ein Array mit Mitarbeitern und suchen einen konkrekten. Auch wenn am Ende true heraus kommt, Effizienz geht anders, schön geht anders 🙂 Hier sind Iterationen notwendig, die wir uns eigentlich sparen könnte. Mit den wiJCollections geht das etwas hübscher (und für die Geeks unter uns: sogar in einer konstanten Laufzeit O(1), yay):

(Die Einrückungen für contains() sind natürlich nicht notwendig).

Aufgrund der internen Datenstrukturen und Speichervorgänge, wird beim hinzufügen von Elementen ein interner Index angelegt, der beim lesenden Zugriff keine Iterationen mehr notwendig macht. Außerdem werden Duplikate behandelt. Wird ein Duplikat erkannt, wird das jeweilige Objekt (egal ob Number, Date, Object) nicht erneut gespeichert. Damit wird sogar noch Platz gespart.

Ist das alles?

Bisher, da noch relativ jung, bietet wiJCollections ausschließlich eine List API an. Die Dokumentation gibt’s auf Github. In Zukunft werden allerdings weitere Collections hinzugefügt: Hashmap / Hashtree als Beispiel, oder eine Stack Collection.

Aktuell sind beispielsweise für die List API folgende Funktionen implementiert:

  • add() – hinzufügen von Elementen
  • addAt() – an einer konkreten Position ein Element hinzufügen
  • clear() – entfernt alle Elemente, Bereinigung der Liste
  • contains() – prüft, ob ein Element vorhanden ist
  • get() – gibt ein Element zurück
  • indexOf() – liefert die Position eines Elements (falls vorhanden)
  • isEmpty() – gibt an, ob die Liste leer ist
  • remove() – entfernt ein konretes Element
  • set() – aktualisiert ein Element
  • size() – gibt die Anzahl der vorhandenen Elemente zurück

Download

Hinweise, Tipps oder Erweiterungen kannst du selbstverständlich bequem über Github selbst handeln. Über konstruktive Kritik freue mich 🙂

One thought on “wiJCollections – Java Collections API für JavaScript

  1. i-love-gütesiegel

    Hey Benno,

    super tollen Blogeintrag hast du da. meiner Meinung nach, geschrieben, vielen Dank dafür! Ich finde es auch sehr wichtig wiJCollections richtig anzuwenden und einzusetzen, aber sollte nicht auch die Kundenzufriedenheit auf der eigenen Seite stehen? Schau doch mal auf https://kundentests.com/guetesiegel vorbei und mach dir selbst ein Bild davon! Über ein Feedback würden wir uns riesig freuen!

    Liebe Grüße

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.