java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Allgemeine Java-Themen

Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 15.05.2009, 07:00   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
Standard HashMap

Hi Leute,

ich hab die Aufgabe ein logfile eines Schlüsselaus-und eingabe Programms auszuwerten.
Ich lasse das logfile einmal durchlaufen Zeile für Zeile, so und jetzt das eigentliche Problem. Das logfile speichert die Daten eines ganzen Tages, d.h. jeder Schlüssel kann ein paar mal ausgegeben und zurückgegeben werden.

Wenn z.B. der Schlüssel mit der Nummer "1" im logfile entdeckt wird, soll entweder ein interner counter um eins erhöht werden und die Zahl in die HashMap eingetragen oder bei einer Ausleihe die Ausleihzeit in die HashMap eingetragen werden.
Wenn das logfile also einmal durchlaufen ist, sollen in der HashMap hinterher alle Schlüssel mit ihren Ausleihzeiten und Ausgaben stehen, damit ich die HashMap hinterher auswerten kann und in eine .txt schreiben kann, dies lasst aber mal eine Sache sein
So könnt Ihr euch es vorstellen, wie die HashMap hinterher aussehen soll:

1, {1, 123423, 2, 162312, 3, 203845}
2, {1, 063412, 2, 124534}
3, {1, 235434}

Wie Ihr hier dran sehen können bei jedem Schlüssel unterschiedlich viele Ein-und Ausgaben pro Tag entstehen. Die Ausleihzeit speicher ich als Integer, in die HashMap, also nicht wundern, dass keine Doppelpunkt(12:34:23) oder ähnliches dazwischen sind.

Jetzt hier noch meine HashMap:
HashMap<Integer, Integer[]> hashMap = new HashMap<Integer, Integer[]>();

Ist das umsetzbar? Wenn ja wie schaffe ich es, dass wenn ein Schlüssel im logfile gefunden wird, entweder der counter erhöht oder die Ausleihzeit, für diesen Schlüssel, in das Integer Array in der HashMap angehängt wird? Nach Durchlauf meines Programms, soll die HashMap also soviele Zeilen haben, wie Schlüssel in dem logfile vorkommen.

Ich weis es is harte Kost, aber ich hoffe Ihr könnt mir weiterhelfen und ich habe es einigermaßen verständlich erklärt

Gruß Patrick
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 08:30   #2 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.005
Abgegebene Danke: 0
Erhielt 2.620 Danke für 2.580 Beiträge
da du nicht weißt, wie viele Elemente pro Schlüssel da sind, empfehle ich dynamischer
Map<Integer, List<Integer>>

umsetzbar ist das, ja

---------

was es mit dem Counter auf sich hat, ist noch nicht klar,
ich nehme an, du analysierst in einer Schleife eine Log-Zeile und hast dann
Integer key = ..;
Integer value = ..;
dann kannst du an dieser Stelle die Map aktualsieren oder irgendwas mit deinem counter machen
oder beides oder nichts davon,

was ist die Frage, wovon hängt das ab, was ist das Problem?
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 08:31   #3 (permalink)
HLX
Stammbenutzer
Megabyte
 
Registriert seit: 02.08.2006
Fachbeiträge: 1.021
Abgegebene Danke: 0
Erhielt 6 Danke für 6 Beiträge
Du solltest ein Objekt mit allen erforderlichen Informationen anlegen.

Code:
public class KeyInfo {

      private Integer id;
      private List<Date> time;

      // getter + setter

}
Dieses Objekt speicherst du unter der Id in der HashMap. Bei Veränderungen kannst du es aus der HashMap holen und den counter oder die Zeit anpassen.

Edit: counter entfernt. Bei Ausleihen, einfach ein Datum hinzufügen. Die Ausgabe kann durch Iteration über die Liste erfolgen (Methode toString).

Geändert von HLX (15.05.2009 um 08:36 Uhr)
HLX ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 09:15   #4 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
@ Slater, wenn ich eine List verwende, wie muss dann mein hashMap.put... Befehl aussehen.

Also wenn z.B. der Schlüssel "23" zurückgegeben wird, soll die hashMap an Stelle Key(in dem Fall 23) aktualisiert werden.
Sprich bei einer Rückgabe wird eben der counter(jeder Schlüssel muss natürlich einzeln hochgezählt werden) hochgezählt und die Zahl an die Liste angehängt werden, die der counter zurückgibt und bei einer Ausleihe wird die Zeit an die Liste angehängt.
Ich brauche den counter nur wegen einer späteren Auswertung, in der ich die Anzahl brauche der Rückgaben an einem Tag
Mein Problem ist das anhängen, an der Stelle Key(in dem Fall 23), ich weis mir immer nur mit überschreiben zu helfen, und nicht anhängen.
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 09:37   #5 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.005
Abgegebene Danke: 0
Erhielt 2.620 Danke für 2.580 Beiträge
was der Counter ist und macht, und ob er in irgendeinem Zusammenhang mit der Map oder diesem ganzen Thema steht,
habe ich nach wie vor nicht verstanden,
ist der counter exakt gleich die Anzahl der Elemente in der Liste pro Key?

Integer key = ..;
Integer value = ..;
Liste l = liste aus map holen
(wenn l null, dann neu erzeugen und in Map speichern)
value in Liste l speichern
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 09:45   #6 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
Der Counter zählt wie oft jeder Schlüssel zurückgegeben wurde.
Also nein nicht gleich der Anzahl an Elementen in der Liste und wie hole ich die Liste aus der HashMap?
Es geht mir einfach nicht in Kopf rein.

Danke, für deine/eure Hilfe
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 09:54   #7 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.005
Abgegebene Danke: 0
Erhielt 2.620 Danke für 2.580 Beiträge
na so wie du jedes Objekt aus einer Map holst,
API lesen oder Tutorials/ Lehrbücher oder einfach mal bei google/ hier im Forum nach Beispielcode mit Maps suchen musst du schon selber
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 15.05.2009, 09:56   #8 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
okay, ich mach mich am Montag dran, weil ich dann wieder im Geschäft bin. Bin grad noch an einem PHP Projekt nebenher, wenn ich soweit bin und wieder vor Probleme stehen werd ich mich hier melden.
Wünsche euch ein angenehmes Wochenende und für die Arbeitenden einen schönen Feierabend.
Gruß Pat
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 26.05.2009, 08:58   #9 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
So ich bin ein Stück weitergekommen. Ich hab jetzt folgende HashMap verwendet:

private static HashMap<Integer, ArrayList<String[]>> hashMap;

Allerdings stehe ich jetzt vor dem großen Rätsel, wie ich die Werte in der hashMap am Ende ausgeben kann, weil wenn ich Sie über get(key) anspreche, bekomme ich nur sowas [[Ljava.lang.String;@addbf1], wie man es von hashMaps eben kennt? Man muss wahrscheinlich den Weg über eine Collection nehmen, habe schon soviel probiert aber bekomme es einfach nicht ausgegeben o.O

Könnt ihr mir weiterheilfen?
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 26.05.2009, 09:03   #10 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von faetzminator
 
Registriert seit: 05.01.2007
Fachbeiträge: 5.038
Abgegebene Danke: 61
Erhielt 559 Danke für 540 Beiträge
Das ist die toString() Methode vom String[], warum brauchst du da String[]? Was ist an
private static Map<Integer, List<Integer>> map;
nicht ok?
__________________
Ich bin keine Signatur, ich headbang hier nur!
faetzminator ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 26.05.2009, 09:14   #11 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
Weil ich die Zeiten, erstmal als String reinschreiben will, also in der Form: 00:12:33
Wenn ich nämlich das Ganze in ein Integer umwandle wäre das ja theoretisch sowas 001233, aber letzten endes gibt er dann 1233 aus, wie das bei Integer so üblich ist und weil ich später mit dem DateFormat weiterarbeite, ist es praktisch wenn ich schon folgende Form vorliegen habe. Daher ist meine Wahl auf die neue Art der HashMap gefallen.

Ich hab es mal wie folgt probiert, aber gibt das oben in meinem ersten post genannte aus:

for(int i = 0; i < 600; i++)
{
if(hashMap.containsKey(i))
{
System.out.println(hashMap.get(i).toString());
}
}
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 26.05.2009, 09:20   #12 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Benutzerbild von faetzminator
 
Registriert seit: 05.01.2007
Fachbeiträge: 5.038
Abgegebene Danke: 61
Erhielt 559 Danke für 540 Beiträge
Wenn schon, dann so:
--> Du kannst immer noch kein "sinnvolles" String[] ausgeben!
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
for(int i = 0; i < 600; i++) {
    if(hashMap.containsKey(i)) {
        String[] str = hashMap.get(i);
        for (String s : str) {
            System.out.println(f);
        }
    }
}
__________________
Ich bin keine Signatur, ich headbang hier nur!
faetzminator ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 26.05.2009, 09:40   #13 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 10.10.2008
Fachbeiträge: 106
Abgegebene Danke: 9
Erhielt 1 Danke für 1 Beitrag
Danke, damit kann ich meine nötigen Testergebnisse erstmal überprüfen, für die Auswertung am Ende, werde ich mir wohl noch etwas komfortableres ausdenken müssen :P

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i = 0; i < 600; i++)
{
  if(hashMap.containsKey(i))
  {
    ArrayList<String[]> str = hashMap.get(i);
    for(String[] s : str)
    {
      for(int j = 0; j < s.length; j++)
      {
        System.out.println(i+" "+s[j]);
      }
    }
  }
}
CroweHammer ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
werte aus hashmap lesen und vergleichen? guest Java Basics - Anfänger-Themen 2 23.02.2007 11:58
Hashmap in JSF? Hilyama Allgemeines EE 0 31.08.2005 09:02
HashMap Sortierung Quadaptor Java Basics - Anfänger-Themen 11 23.12.2004 14:13
HashMap mit Wortliste vergleichen kognitio Java Basics - Anfänger-Themen 6 03.06.2004 11:23
HashMap richtig zurückgeben shiRiaRu Java Basics - Anfänger-Themen 14 26.02.2004 15:06


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de