Daten wie speichern?

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
Hallo,

ich möchte Namen von Bauteilen und deren zugehörige Menge speichern... Eine ArrayList kann ich wohl hierfür nicht nehmen, da ich doch 2 Spalten brauche?! Ich weiß vorher aber auch nicht, wieviele Datensätze sich ergeben - daher kann ich doch auch kein Array anlegen, weil ich hierfür ja die Größe bei der Deklaration mit angeben muss?!

Was kann ich hierfür am Besten verwenden? (Ich brauche quasi ein "Array" mit 2 Spalten und variabler Länge - nur wie?)

Danke.
 

magic_halli

Bekanntes Mitglied
Mh, Hashmap - hab noch nie was damit gemacht und leider gibt mein Buch so gut wie keine Info´s darüber preis :(
Muss da wahrscheinlich erstmal ne längere Zeit mit recherchieren zubringen...


Wie wärs mit einem Objekt das 2 Spalten beinhaltet und das in der ArrayList speichern?!
Mit ArrayList hab ich schon gearbeitet. Wie soll das aussehen... ein Objekt mit 2 Spalten darin speichern?
Das klingt soweit ja erstmal ganz gut :wink:
 

EOB

Top Contributor
also sooo kompliziert ist hashmap nun auch nicht. hier mal ein link:

link. das ist im prinzip so, dass man key value paare hat. man kann dann ueber den key, den wert (value) bekommen. also key waere dann zb dein bauteil und der value weare die anzahl.


gruesse
 

hupfdule

Top Contributor
magic_halli hat gesagt.:
Muss da wahrscheinlich erstmal ne längere Zeit mit recherchieren zubringen...
Musst du nicht. Guck in die API: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html. Das ist das Interface Map. Welche Map du im Endeffekt benutzt, ist wurscht. In deinem Fall wäre die HashMap schon recht geeignet.

Das besondere an einer Map im Vergleich zu einer ArrayList: Es gibt keine doppelten Werte. In deinem Falle verstehe ich es so, dass du zu jedem Bauteil exakt eine Anzahl speichern willst. Damit ist die Map sehr geeignet, weil verhindert wird, dass du ein Bauteil zwei mal darin speicherst (mit eventuell unterschiedlichen Werten für die Anzahl).
 

magic_halli

Bekanntes Mitglied
OK, überzeugt!!!
Laut der Erklärung von hupfdule ist eine HashMap tatsächlich genau das richtige, da beim Auslesen der Teile einer Baugruppe ein Teil öfters vorhanden sein kann und dementsprechend die Anzahl sich von mal zu mal erhöhen muss - ohne dass der Name des Teils mehrmals in der HashMap vorkommen soll!

Ich probiere mal etwas herum und poste ggf. wieder hierrein :)
 

magic_halli

Bekanntes Mitglied
Ich gehe meine Baugruppenstruktur durch und will einfach als Key den jeweils gefundenen Namen und als Value die Menge in die HashMap schreiben. Wobei die Menge beim ersten mal 1 ist und sich dann erhöhen soll, wenn der Key (Teilename) nochmals gefunden wird.

Doch ich hab schon Probleme, überhaupt erstmal Daten zu adden!!! Ich bekomme den Fehler, dass die Methode put nicht geeignet ist für die Argumente String und Integer?!?!?!

Code:
String name;
int quantity = 1;
HashMap map = new HashMap();

//Teile einer Baugruppe ermitteln
...
//components ist das Array mit den Namen der Teile
for (int i = 0; i < components.getarraysize(); i++){
     ...
     //in name steht hier der jeweilige Name des Teils - der ist auf jeden Fall korrekt.
     name = descrModel.GetFullName().toString();
     //einfach name als Key und quantity als Menge hinzufügen - geht nicht (Fehler s.o.)!!!
     map.put(name, quantity);
}
Mein Problem ist eben das hinzufügen von Key (Name) und Value (Menge, die sich selbst hochzählt, wenn Key doppelt oder dreifach gefunden?).
Wie kann ich dann außerdem die Menge hochzählen bzw. macht das die HashMap automatisch für mich?
 

hupfdule

Top Contributor
eine Map kann nur Objekte speichern. int ist ein primitiver Datentyp. Du musst ihn also in Integer wrappen (Integer ist ein Objekt):

Code:
map.put(name, new Integer(quantity));

Mit automatisch hochzählen is natürlich nix. Das musst du selbst machen. Ist aber auch nicht schwer. Auslesen, was momentan für eine Anzahl drin steht, diese +1 und dann wieder speichern. Aber aufpassen, falls das Bauteil in der Map noch nicht enthalten ist, wirst du null zurück bekommen.
 

magic_halli

Bekanntes Mitglied
Also mit der Menge hochzählen hab ich mir so gedacht:
Code:
//das folgende geschieht alles in meiner for-Schleife, in der jedes Teil ermittelt wird... (s.o.)

//containsKey gibt mittels Boolean - Werten die Existenz eines Schluessels an
boolean vorhanden = map.containsKey(name);
//Eintrag noch nicht vorhanden: Name und quantity einfach hinzufügen
if(vorhanden == false){
      //Daten zu HashMap hinzufügen (Key, Value)
      map.put(name, new Integer(quantity));
}
//Eintrag bereits vorhanden: quantity zum Key 'name' auslesen, erhöhen und neu abspeichern
else{
       //quantity erhöhen und neu abspeichern
       int menge = map.get(name);
       menge++;
       map.put(name, new Integer(menge));
}

So könnte das doch erstmal funktionieren, oder???
Allerdings gibts im else-Zweig ein Konvertierungsproblem von Objekt auf int! Wie kriege ich das weg?

Ansonsten sollte es dann hoffentlich klappen ???:L
 

thE_29

Top Contributor
Mein Weg:

Code:
public class DeineKlasse
{

 //dein Code

//Methode zum Befühlen
private void fill()
{
  ArrayList ar = new ArrayList();
  MyObj tmp = new MyObj(1,"Erstes");
  ar.add(tmp);
  //usw...

  //zurückholen
  MyObj get = (MyObj)ar.get(0);

}


private class MyObj
{
  int  menge;
  String name;

  public MyObj(int menge, String name)
  {
    this.menge = menge;
    this.name = name;
  }
}


Du musst wissen ob du mit einem Key Eintrag und einem Value Eintrag arbeiten willst! Oder die Daten einfach nur in einer ArrayListe brauchst!

Das sind 2 verschiedene paar Schuhe!!
 

hupfdule

Top Contributor
magic_halli hat gesagt.:
So könnte das doch erstmal funktionieren, oder???
Ja, sieht gut aus. Sehe so auf Anhieb keinen Fehler.
Allerdings gibts im else-Zweig ein Konvertierungsproblem von Objekt auf int! Wie kriege ich das weg?
Das ist wieder das Problem, dass du ja einen Integer speicherst, kein int. Also bekommst du auch ein Integer zurück. Du musst demzufolge nach Integer casten:

Code:
Integer menge = (Integer) map.get(name);
 

magic_halli

Bekanntes Mitglied
...Du musst demzufolge nach Integer casten
ja natürlich!

Aber das casten geht eben auch nur in der Zeile gut:
Code:
Integer menge = (Integer) map.get(name);
Die Zeilen danach machen Probleme:
Code:
//hier Fehler: Cannot convert from Integer to int
menge++;
//hier Fehler: constructor Integer(Integer) is undefined
map.put(name, new Integer(menge));
Ich hab schon allesmögliche hierauf probiert - ohne Erfolg!
 

hupfdule

Top Contributor
Guck in die API: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html ;-)
Das solltest du dir ohnehin angewöhnen beim Programmieren mit Java. Die API ist immer die erste Quelle, die man befragen sollte.

Integer hat die Methode intValue(). Damit bekommst du einen reinen int zurück. Diesen kannst du mit ++ inkrementieren. Durch das Autoboxing seit java 1.5 hätte ich gemeint, dass das auch direkter geht. Aber damit musst du dich jetzt noch nicht auseinander setzen.
 

magic_halli

Bekanntes Mitglied
So, ich hab das ganze jetzt ein klein wenig umgeschrieben... jetzt erhalte ich keine Fehler mehr und die Sache sollte funktionieren, hoffe ich?!
Code:
boolean vorhanden = map.containsKey(name);

            		//Eintrag noch nicht vorhanden
            		if(vorhanden == false){
            			//Daten zu HashMap hinzufügen (Key, Value)
            			map.put(name, new Integer(1));
            		}
            		//Eintrag vorhanden: quantity für diesen Key auslesen, erhöhen und neu abspeichern
            		else{
            			Integer quantity = (Integer) map.get(name);
            			map.put(name, new Integer(quantity.intValue()+1));
            		}

Jetzt muss ich mich nur erstmal kundig machen, wie ich meine HashMap von Anfang bis Ende durchgehe, um mit jedem Eintrag schließlich was zu machen :###
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten im Programm speichern Java Basics - Anfänger-Themen 14
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
P Daten auslesen und in CSV speichern Java Basics - Anfänger-Themen 6
C Daten speichern und laden Java Basics - Anfänger-Themen 6
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
B daten speichern in einer tabelle Java Basics - Anfänger-Themen 5
S in MySQL Daten Bank speichern Java Basics - Anfänger-Themen 8
D Moeglichkeiten zum Speichern von Daten Java Basics - Anfänger-Themen 9
N txt daten untereinander speichern Java Basics - Anfänger-Themen 2
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
A Daten speichern Java Basics - Anfänger-Themen 4
S Problem beim Speichern und Laden von Daten Java Basics - Anfänger-Themen 13
D Input/Output Eingegebene Daten Speichern Java Basics - Anfänger-Themen 5
A Daten speichern und wieder in ein Array laden Java Basics - Anfänger-Themen 4
M Daten dauerhaft speichern Java Basics - Anfänger-Themen 3
P Sensible Daten Speichern/Verschlüsseln von serialisiertem Objekt Java Basics - Anfänger-Themen 5
M Daten in Liste speichern Java Basics - Anfänger-Themen 12
K Kleines Spiel / Daten speichern Java Basics - Anfänger-Themen 8
H Speichern von Daten Java Basics - Anfänger-Themen 10
S Frage zum speichern der Daten in einer LinkedList Java Basics - Anfänger-Themen 2
A Daten speichern (ohne DB) Java Basics - Anfänger-Themen 12
S OOP In Klasse Daten speichern? Java Basics - Anfänger-Themen 4
K Daten speichern Java Basics - Anfänger-Themen 3
I Daten speichern Java Basics - Anfänger-Themen 6
B Daten extern speichern? Java Basics - Anfänger-Themen 3
M Daten in CSV Datei Speichern Java Basics - Anfänger-Themen 3
K Daten in Text.txt speichern ! Java Basics - Anfänger-Themen 5
TheKing Daten speichern Java Basics - Anfänger-Themen 10
B Daten in mehrdimensionalem Array, speichern, loeschen, aendern und abrufen Java Basics - Anfänger-Themen 2
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
G Speichern eines Applets (Speichern von Daten - Applikation) Java Basics - Anfänger-Themen 31
G Daten in ArrayList speichern Java Basics - Anfänger-Themen 44
B Speichern von Daten Java Basics - Anfänger-Themen 16
M Aus .txt Datei Daten in Array speichern Java Basics - Anfänger-Themen 3
G Daten in einer Klasse "speichern" Java Basics - Anfänger-Themen 13
M Daten in Datei speichern Java Basics - Anfänger-Themen 8
W JTable Daten als txt speichern Java Basics - Anfänger-Themen 9
G Daten speichern Java Basics - Anfänger-Themen 12
T Adressverwaltung - Wie Daten speichern? Java Basics - Anfänger-Themen 4
T Daten in HashMap speichern? Java Basics - Anfänger-Themen 5
K Speichern von Daten Java Basics - Anfänger-Themen 9
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben