Erste Schritte Viele Objekte einer Klasse "verwalten"

DMSB12

Mitglied
hallo. ich lerne noch, also verzeiht meine Anfängerfrage 😉

Wenn ich eine Klasse (zB. DVDs) habe und nun für jede DVD ein Objekt anlege, dann kann ich die ja nur verwalten, wenn ich die irgendwie indexiere.
Nun meine Frage:

wie macht man das am sinnvllsten? über array, list oder hashset?
und wenn ich die Referenzvariable eines Objektes in einem Array (oder ähnlichen) habe, muss ich dann für jede Variable, die eine Eigenschaft eines Objektes beinhaltet auch in ein Array tun?

steht in dvd[277].titel dann der titel?
 
Hey, also es gibt Verschiedene Vor- und Nachteile. Zum Beispiel ein Array hat immer eine Fixe Größe, wenn du jetzt eine Array hast mit 100 DVDs und eine Weiter hinzu fügen willst.. dann musst du das Array erweiter und die 100 DVDs rüber Kopieren! Der Vorteil ist, das wenn du die 55 Dvd haben willst einen zugrif von O(1) hast also seher schnell. Bei einer Liste ist es so das die Dynamisch Wächst und das Problem mit dem Array auf gewiesse weiße Löst, nur jetzt ist es so du willst alle DVDs die als Thema Drama haben, dann musst du über alle DVDs gehen um die Richtige zu fienden also eine Laufzeit von O(n) da du dir alle DVDs anschauen musst. Ntürlich kannst du dir am Anfang eine Liste aufbauen mit allen DVDs die Dramen sind!

Ich glaube die Frage ist, wie offt Greifst du zu und wie oft änbert sich die Liste mit DVDs. zb. da mit dem Dramem wenn jetzt 50 mal in der Sekunde nach Dramen DVDs gefragt wird dann ist es schlau eine Liste zu halten. wenn das aber nur einmal im Jar passirt dann reicht eine Suche.

Eine weiter Frage ist, du musst die DVDs irgend wie einheitlich einsortieren. zb. nach Titel oder du vergibst Nummer. Nach Titel würde hier eine HashMap sin machen, bei Nummer über eine Liste!

Also es sind viele Fragen die man zu erst klären sollte!
 
Wenn die Menge der DVDs vorher bekannt ist, könnte ein Array gut sein. Eine List wäre komfortabel, wenn du nicht weißt vorher, wie groß die Menge der DVDs ist.
Wenn das die Klasse DVD ist:

Java:
public class DVD {
   String titel;
   public DVD(String titel) {
       this.titel = titel;
   }
}

Dann brauchst du sowas wie Titel nicht extra zu speichern. Das ist ja der Sinn der Klassen, dass du Werte gruppierst und kapselst.

Java:
List<DVD> dvds = new LinkedList<DVD>();
dvds.add(new DVD("HerrDerRinge"));
System.out.println(dvds.get(0).titel);

(Edit: Natürlich sollte man auf Felder eher über Getter&&Setter zugreifen und die Eigenschaften private machen, aber darauf verzichte aus Einfachheitsgründen mal 😉)
 
Zuletzt bearbeitet:
ok, soweit ist meine Frage beantwortet. bevor ich mich in die folgenden Themen einlese, gestattet mir vorab die Frage:

in der Praxis werde ja die Daten der Objekte ja nicht im Programmcode stehen, sondern vom User eingeben und dann in einer sequenziellen Datei gespeichert, so kenne ich es von anderen Programmiersprachen. Das geht hier auch, oder?
 
oje, da dachte ich ich hätts verstanden.... bitte erklärt mir meinen Denkfehler:

Java:
public class DVD

  //Variablen
  String titel;
  String kategorie;
  int fach;

  //Konstruktor
  DVD film = new DVD ( String ttl, String kat, int fach ) {
    this.titel = ttl;
    this.kategorie = kat;
    this.fach = fach;
    }

  DVD [] film = new DVD[100];

  //die ersten 2 Film-Objekte
  film[0] = new DVD ("Blade", "Action", 27);
  film[1] = new DVD ("Die Hard", "Action", 28);
}
ohne new gehts auch nicht. ich verzweifle noch. in allen Beispielen, die ich zu arrays gesehen habe, sind die array-variablen vom typ int oder String. meine soll aber vom typ der eigenen klasse sein... wo ist der Denkfehler?
 
Ein Array von DVD's in der Klasse DVD macht wenig Sinn.

Außerdem kann man nicht einfach so alles in den Rumpf einer Klasse schreiben, dafür hat man Methoden erfunden.
 
Zuletzt bearbeitet:
ohne new gehts auch nicht. ich verzweifle noch. in allen Beispielen, die ich zu arrays gesehen habe, sind die array-variablen vom typ int oder String. meine soll aber vom typ der eigenen klasse sein... wo ist der Denkfehler?

Die Klasse DVD sollte nur Attribute und Methoden eines realen DVD-Objektes beschreiben. Also Attribute wie Titel, Erscheinungsjahr, evtl. Format usw. sowie Getter- und Setter-Methoden. Für die Verwaltung der DVDs würde ich eine neue Klasse erstellen, beispielsweise DVDLibrary. Über den Konstruktor kann der Titel der Library sowie, sofern über ein Array, die Grösse des Array mitgeben. Diese Library stellt Methoden wie addDVD(), removeDVD(), findDVD() sowie weitere zur Verwaltung der DVDs zur Verfügung. Der Entwurf kann auch anders aussehen. Poste Deine Überlegungen und Vorschläge.
 
bei den verlinkten Seiten verstehe ich leider nur Bahnhof.
wo liegt denn nun der Denkfehler? warum macht es wenig Sinn ein Array von der Referenzvariable der Klasse DVD?
Die Referenzvariable muss doch den Typ der Klasse haben. Warum sollte das beim array anders sein?
kann mir jemand vielleicht einen Code-Schnipsel posten, wie ich viele Objekte einer Klasse mittels Array benutzen kann?
 
Dein Denkfehler steht weiter oben

Du kannst nicht einfach so in den Rumpf einer Klasse schreiben, sondern musst eine Methode dafür machen.

Ansonsten ist dein vorgehen korrekt. Es macht nur keinen Sinn ein Array aus DVDs in eine DVD zu packen.

Gruß,

Martin
 
bin ich nu blöd oder ist das kein vaildes Java was da steht da fehlen einige { bzw } ..denn wird nen Kostruktur anders gebildet -.-

guck dir mal in der Java Insel das Thema für die Konsturktoren an
 
was ist am Konstruktor falsch?
Java:
public class DVD {

  //Variablen
  private String titel;
  private String kategorie;
  private int fach;

  //Konstruktor
  DVD film = new DVD ( String ttl, String kat, int fach ) {
    this.titel = ttl;
    this.kategorie = kat;
    this.fach = fach;
    }

  DVD [] film = new DVD[100];

  // getter & setter Methoden
}

Java:
Public class DVDVerwaltung {

  public static void main( String [] args ) {

  //die ersten 2 Film-Objekte, nur zum test, Daten sollen dann über Eingabe-Klassen realisiert werden
  DVD film[0] = new DVD ("Blade", "Action", 27);
  DVD film[1] = new DVD ("Die Hard", "Action", 28);
  // speicher-methodenaufruf (Speicher-Klasse)
  }
}
Das dass falsch ist, sagt mir auch Eclipse. aber nicht warum. ich erhoffe mir von euch eine verständliche Erklärung und super wäre auch korrekter code als Beispiel.
Meine Topic-Frage ist noch die selbe. Wie löse ich das Problem viele Objekte mittels array?
 
Schau mal hier:
Java:
public class DVD {
 
  //Variablen
  private String titel;
  private String kategorie;
  private int fach;
 
  //Konstruktor
  public DVD ( String ttl, String kat, int fach ) {
    this.titel = ttl;
    this.kategorie = kat;
    this.fach = fach;
    }

  
  // getter & setter Methoden
}
Und so machst du das Array[]
Java:
public class DVDVerwaltung {
 
  public static void main( String [] args ) {
 
  DVD[] filme = new DVD[100];
  //die ersten 2 Film-Objekte, nur zum test, Daten sollen dann über Eingabe-Klassen realisiert werden
  filme[0] = new DVD ("Blade", "Action", 27);
  filme[1] = new DVD ("Die Hard", "Action", 28);
  // speicher-methodenaufruf (Speicher-Klasse)
  }
}
 
ich erhoffe mir von euch eine verständliche Erklärung und super wäre auch korrekter code als Beispiel.

Der Konstruktor enthält mehrere Fehler: 1. Es darf keine Zuweisung erfolgen. 2. Der Bezeichner film wird für das Array verwendet und verursacht den Fehler "Duplicate field DVD.fach". 3. Mit new wird ein Objekt erzeugt und nicht deklariert. 4. In der Parameterliste von new darf keine Typdeklaration vorkommen. Ich empfehle Kapitel 3 in Galileo Computing :: Java ist auch eine Insel – gut zu studieren.
 

Zurück
Oben