Objekte dynamisch erstelle

Status
Nicht offen für weitere Antworten.
F

fleija

Gast
Hallo habe folgendes Prob. beim Prog. eines Vokabeltrainers

Ziel:

- Ich will für jeden Vokabelsatz ein Objekt erstellen z.B. Vokabel.1.englisch Vokabel.1.deutsch
wobei die "1" von 1 - ca. 500 gehen sollte

Die Vokabeln lese ich aus einer sequenziellen Datei, die Anzahl der Vokabeln ist unterschiedlich.

Kann ich mittels einer Schleife Objekte erstellen und dabei den Wert "1" von "Vokabel.1.deutsch"
hoch zählen, in einem Array z.B. Es ist von ca. 500 Vokabelsätzen auszugehen

Oder ist mein Ansatz panne ?
 

KSG9|sebastian

Top Contributor
ich versteh net so ganz was du meinst..
wie ist die struktur der datei? vll. so:

---
Haus.1.deutsch
house.1.englisch
Mutter.2.deutsch
Mutter.2.englisch
.
.
---

So vielleicht ? Aber wasmeinst du mit hochzählen?
Ich würds mit nem 2-dimensionalen array machen..


vokabeln[0][0] = "Haus"
vokabeln[0][1] = "House"

oder ne ArrayList oder sowas...beschreib bein prob nochmal verständlich bitte ;)
 
B

Beni

Gast
Meinst sowas in die Richtung?

Code:
// Die Paare Deutsch - Englisch
public class Pair{
  private String deutsch, english;

  public Pair( String deutsch, String english ){
    this.deutsch = deutsch;
    this.english = english;
  }

  public String getDeutsch(){
    return deutsch;
  }

  public String getEnglish(){
    return english;
  }
}

Code:
 // Das Laden der Dateien
  public Pair[] load(){
    List<Pair> pairs = new LinkedList<Pair>();

    for( ... ){
      String deutsch = ... // aus der Datei eingelesen
      String english = ... // aus der Datei eingelesen
      pairs.add( new Pair( deutsch, english ));
    }
     
    return pairs.toArray( new Pair[ pairs.size() ] );
  }

Code:
// Zugriff auf einzelne Paare
public void doSomething(){
  Pair[] pairs = load();

  for( int i = 0; i < pairs.length; i++ ){
    System.out.println( "Deutsch: " + pairs[i].getDeutsch()  + " - english: " + pairs[i].getEnglish() );
  }
}

Das ist nicht ganz fertig, aber so würdest du einen Array von Pairs herstellen, wobei jedes Pair ein Deutsch-Englisch-Paar ist.
 

eclipse

Mitglied
Hallo,

versuch dein Problem mit hashtables (key,value) zu lösen.
Also ich würde die Vokabeln folgendermaßen strukturieren:

Deutsch | Englisch

Beispiel:
----------
... ...
Baum tree
Haus house
... ...

Die Datei muss dann nur noch zeilenweise eingelesen und entsprechend der hashtable zugewiesen werden (DeutschEnglisch; EnglischDeutsch).

Mit hashtable als Datenstruktur (O(1)) erhälst du einen schnelleren Zugriff auf die Elemente als mit Arrays (O(n)).
 

nollario

Bekanntes Mitglied
aber bei der hashtable müsste man sich auf einen key erst mal festlegen... und das hat auch so seine tücken....
 

eclipse

Mitglied
aber bei der hashtable müsste man sich auf einen key erst mal festlegen


und wo ist das Problem?
Die "keys" sind die deutschen Vokabeln und die "values" die englische Vokabeln. Und natürlich umgekehrt, je nach Algorithmus.

Bsp:
DeutschEnglisch(Wort,word)
EnglischDeutsch(word,Wort)


und das hat auch so seine tücken...
und wo glaubst du, wo die Tücken liegen?
Mit hashtables lassen sich elegant ein Vokabel-Trainings-Programm implementieren.
 

Sky

Top Contributor
Naja, eine der Tücken ist, dass eine Hashtable zu einem Key nur genau einen Value aufnehmen kann.
Aber ist leider so, das ein Wort auch mehrere Übersetzungen haben kann, so z.B. bei dem Wort "Haus": domicile, home, house
 

dotlens

Top Contributor
eine andere tücke ist, dass hashtable sehr langsam ist, wenn es zu einer value eine key suchen soll.
Dann müsstest du eine hashtable deutsch-englisch anlegen und eine englisch-deutsch, was zu Datenüberfluss führt.
 

eclipse

Mitglied
@dotlens
eine andere tücke ist, dass hashtable sehr langsam ist, wenn es zu einer value eine key suchen soll.
Wenn ich mich recht entsinne, sind hashtables sehr schnell in Bezug auf Suchen/Einfügen - Aufwand O(1). D.h. der Zugriff ist konstant, wogegen Arrays langsamer sind - Aufwand O(n).

Dann müsstest du eine hashtable deutsch-englisch anlegen und eine englisch-deutsch, was zu Datenüberfluss führt.
Wo willst du dann die eingelesenen Daten speichern? Datenstruktur?

@sky80
Naja, eine der Tücken ist, dass eine Hashtable zu einem Key nur genau einen Value aufnehmen kann.
Ähm, ich habe mal eine 1:n Beziehung implementiert. D.h. zu einem key kann ich mehrere values zuweisen (Array).

Aber ist leider so, das ein Wort auch mehrere Übersetzungen haben kann, so z.B. bei dem Wort "Haus": domicile, home, house
Aus deinem Beispiel vereinfacht:

Code:
Hashtable hashtable = new Hashtable();
String key = "Haus";
String values[] = { "domicile", "home", "house" };

hashtable.put(key, values);
String val[] = (String[]) hashtable.get(key);	
	
for (int i = 0; i < val.length; i++) {
	System.out.println(key + " = " + val[i]);
}

Also, es klappt wunderbar!

PS: Der Einlese-Algorithmus der Datei muss nur noch angepasst werden (key - String / value(s) - String Array)
 

dotlens

Top Contributor
eclipse hat gesagt.:
@dotlens
eine andere tücke ist, dass hashtable sehr langsam ist, wenn es zu einer value eine key suchen soll.
Wenn ich mich recht entsinne, sind hashtables sehr schnell in Bezug auf Suchen/Einfügen - Aufwand O(1). D.h. der Zugriff ist konstant, wogegen Arrays langsamer sind - Aufwand O(n).
ich hab eher das gemeint:
galileo hat gesagt.:
Im Gegensatz zu get() und containsKey(), die das Auffinden eines Werts bei gegebenem Schlüssel erlauben, lässt sich auch nur nach den Werten ohne Schlüssel suchen. Dies ist allerdings wesentlich langsamer, da alle Werte der Reihe nach durchsucht werden müssen. Die Klasse bietet hierzu containsValue() an.

eclipse hat gesagt.:
Dann müsstest du eine hashtable deutsch-englisch anlegen und eine englisch-deutsch, was zu Datenüberfluss führt.
Wo willst du dann die eingelesenen Daten speichern? Datenstruktur?
z.b. serialisieren

eclipse hat gesagt.:
Naja, eine der Tücken ist, dass eine Hashtable zu einem Key nur genau einen Value aufnehmen kann.
Ähm, ich habe mal eine 1:n Beziehung implementiert. D.h. zu einem key kann ich mehrere values zuweisen (Array).
ist vieleicht nicht das klügste, da hier mit haswerten gearbeitet wird:
galileo hat gesagt.:
Ein Hashcode ergibt sich aus den Attributen eines Objekts. Zum Finden eines Objekts in einem Assoziativspeicher wird dann nach dem Hash-Wert gesucht. Dumm ist, wenn sich dieser in der Zwischenzeit ändert.

Point q = new Point( 10, 10 );
Map hm = new HashMap();
hm.put( q, "Punkt q" );
q.x = 12345;
System.out.println( hm.get(q) ); // ???

Nach der Zuweisung an x wird hashCode() einen anderen Wert als vorher liefern. Wenn nun get() nach dem Objekt sucht, berechnet es den Hashcode und sucht in den internen Datenstrukturen. Änderte sich jedoch der Hashcode zwischendurch, kann das Element nicht mehr gefunden werden und liegt als Leiche in der Map. Daher kann nur davor gewarnt werden, Objektattribute von Objekten, die durch Assoziativspeicher verwaltet werden, nachträglich zu ändern. Das Prinzip Hashing benutzt gerade diese Eigenschaft, Objekte durch unveränderte Zustände wieder zu finden.
 

Sky

Top Contributor
eclipse hat gesagt.:
@sky80
Naja, eine der Tücken ist, dass eine Hashtable zu einem Key nur genau einen Value aufnehmen kann.
Ähm, ich habe mal eine 1:n Beziehung implementiert. D.h. zu einem key kann ich mehrere values zuweisen (Array).

Aber ist leider so, das ein Wort auch mehrere Übersetzungen haben kann, so z.B. bei dem Wort "Haus": domicile, home, house
Aus deinem Beispiel vereinfacht:

Code:
Hashtable hashtable = new Hashtable();
String key = "Haus";
String values[] = { "domicile", "home", "house" };

hashtable.put(key, values);
String val[] = (String[]) hashtable.get(key);	
	
for (int i = 0; i < val.length; i++) {
	System.out.println(key + " = " + val[i]);
}

Also, es klappt wunderbar!

PS: Der Einlese-Algorithmus der Datei muss nur noch angepasst werden (key - String / value(s) - String Array)

Also, dass das Problem mit einer Hashtable nicht lösbar wäre habe ich ja auch nie behauptet. Es ist eine Tücke, die Du auch sehr schön gelöst hast. Wobei ich als Value kein String[] wählen würde; lieber einen Vector oder ein Set...
 

eclipse

Mitglied
@dotlens
Ich weiss nicht was im galileo alles im Detail drin steht, aber ich habe im Studium (Algorithmen&Datenstrukturen) gelernt, dass für solche Fälle, wie oben, hashtabelle als Datenstruktur verwendet wird.
Habe selbst im Studium ein Programm (in C++) geschrieben. Die Datei hatte über 16.000 Datensätze (Deutsch-Englisch) und es lief "ohne Tücken".

Aufjedenfall ist die Verwendung einer hashtabelle performanter als Arrays.
Google mal im Netz bzgl. der Datenstruktur. Du findest en Masse Unis, die Algorithmen & Datenstrukturen darlegen mit Oh-Notationen.

ist vieleicht nicht das klügste, da hier mit haswerten gearbeitet wird:
Ähmm, wie würdest Du dann vorgehen?
Nenn mir mal eine Datenstruktur?

Zum Finden eines Objekts in einem Assoziativspeicher wird dann nach dem Hash-Wert gesucht. Dumm ist, wenn sich dieser in der Zwischenzeit ändert.
In diesem Fall wird sich der Hashcode nicht ändern. Es wird einmalig geschehen, d.h. beim Einlesen der Datei.
Es wird ja nicht zusätzliche Datensätze eingefügt, sondern lediglich nur gesucht. Selbst dann (das Enfügen), ist der Zugriff konstant (O(1)).

@sky80
Also, dass das Problem mit einer Hashtable nicht lösbar wäre habe ich ja auch nie behauptet. Es ist eine Tücke, die Du auch sehr schön gelöst hast. Wobei ich als Value kein String[] wählen würde; lieber einen Vector oder ein Set...
Siehst Du das immer noch als "Tücke"?
Naja, die Values als String[] war nur ein Beispiel. Für die Implementierung würde ich einen entspr. Datentyp verwenden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
R Objekte dynamisch erstellen? Java Basics - Anfänger-Themen 14
H Objekte dynamisch erzeugen? Java Basics - Anfänger-Themen 6
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
6 Swing: Dynamisch erzeugte Objekte sind verschoben Java Basics - Anfänger-Themen 2
Z Objekte dynamisch erzeugen Java Basics - Anfänger-Themen 19
S Objekte dynamisch anlegen Java Basics - Anfänger-Themen 3
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben