Java Standard: Datenstrukturen

Aus Wikibooks

Wechseln zu: Navigation, Suche
Wikibooks buchseite.svg Zurück zu Primitive Datentypen | One wikibook.svg Hoch zu Java Inhaltsverzeichnis | Wikibooks buchseite.svg Vor zu Variablen und Bezeichner


Inhaltsverzeichnis

[Bearbeiten] Datenstrukturen

In der Java API (Application Programming Interface) existieren unterschiedlichste Datenstrukturen. Ihre Aufgabe besteht darin, Werte oder Objekte möglichst effizient bzw. ressourcensparend zu speichern, zu organisieren und für Algorithmen zur Verfügung zu stellen.

Aufgrund dieser und weiterer Anforderungen an Datenstrukturen erweist sich die Erstellung solcher als relativ komplex. Deshalb wird zunächst auf die Nutzung bestehender Datenstrukturen eingegangen.

Auch wenn es zunächst simpel erscheinen mag, ist die Auswahl der geeigneten Datenstruktur keine leichte Aufgabe. Die meisten Datenstrukturen sind aufgrund der oben genannten Anforderungen Spezialisten. Das macht sie höchst geeignet für bestimmte Aufgaben und gleichzeitig höchst ungeeignet für andere Aufgaben. Berücksichtigt man dies nicht, kann dies zu sehr hohen Leistungsanforderungen von Anwendungen führen, wodurch diese eventuell sehr langsam werden.

Aus diesem Grund sollen in den folgenden Kapiteln neben der Vorstellung der gängisten Datenstrukturen der Java API auch Nutzungsempfehlungen gegeben werden. Diese Empfehlungen sind jedoch nicht als absolut anzusehen. Man kann höchstens für Standardaufgaben bzw. Standardalgorithmen, wie die Sortierung von Daten Empfehlungen aussprechen. Das Ganze läuft folglich auf eine Beurteilung einer Kombination aus Datenstruktur und Standardalgorithmen hinaus. Letztendlich muss aber der Programmierer individuell entscheiden, welche Kombinationen effizient bzw. angemessen sind und welche nicht.

[Bearbeiten] Array

Im eindimensionalen Fall wird das Array häufig als Vektor und im zweidimensionalen Fall als Tabelle oder Matrix bezeichnet. Arrays sind aber keinesfalls nur auf zwei Dimensionen beschränkt, sondern werden beliebig mehrdimensional verwendet. Wegen ihrer Einfachheit und grundlegenden Bedeutung bieten die allermeisten Programmiersprachen eine konkrete Umsetzung dieser Datenstruktur als zusammengesetzten Datentyp Array im Grundsprachumfang an.

[Bearbeiten] Ein Beispiel

 public class ArrayTest1
 {
   private double[] zahlenFeld;
 
   public ArrayTest1()
   {
     zahlenFeld = new double[10];   
   }
 
   public void setZahlInFeld(int index, double wert)
   {
     zahlenFeld[index]=wert;
   }
 
   public double getZahlInFeld(int index, int wert)
   {
     return zahlenFeld[index];
   }  
 }

Die Eigenschaft zahlenfeld wird als Array mit double-Elementen deklariert:

private double[] zahlenFeld;

Das Kennzeichen hierfür sind die eckigen Klammern. Im Konstruktor wird dann ein neues Array mit 10 Elementen angelegt:

zahlenFeld = new double[10];

Auf die einzelnen Elemente kann man mit Angabe des Index zugreifen:

zahlenFeld[5]=27.3;

setzt beispielsweise zahlenFeld mit dem Index 5 auf den Wert 27.3 So erklärt sich die get- und die set-Methode im obigen Beispiel. Natürlich muss bei einem Array noch der Index genannt werden, weshalb sich der Übergabeparameter index ergibt.

  • Die Zählung eines Arrays beginnt bei 0, daher hat ein Array mit 10 Elementen den höchsten Index 9.

Greift man auf einen Index außerhalb des festgelegten Bereichs zu, so erhält man eine Fehlermeldung. Bei dem obigen Beispiel reicht dafür, den Index 10 zu wählen.

[Bearbeiten] length

Jedes Array hat die Eigenschaft length, mit der die Anzahl der Felder festgestellt werden kann.

  public double getLaenge()
  {
    return zahlenFeld.length;
  }

Des Weiteren lässt sich mit Hilfe von length ein Array per Schleife ausgeben.

   public static void main(String[] args)
   {
     String[] name = { "Hans", "Josef", "Peter" };
     for (int i = 0; i < name.length; i++)
     {
       System.out.println(i + "tes Element: " + name[i]);
     }
   }

[Bearbeiten] Anwendungsbeispiel: Bestimmen des Maximums

  public double getGroessteZahl ()
  {
      double maximum=zahlenFeld[0];
      int i=1;
      while(i<zahlenFeld.length){
         if (zahlenFeld[i]>maximum) {
            maximum=zahlenFeld[i];    
         }
         i++;
      }
      return maximum;
  }
Wikibooks buchseite.svg Zurück zu Primitive Datentypen | One wikibook.svg Hoch zu Java Inhaltsverzeichnis | Wikibooks buchseite.svg Vor zu Variablen und Bezeichner
Persönliche Werkzeuge