Verständnisfrage im Umgang mit Map

m1k3ch3ck

Mitglied
Hallo,


ich sitz gerade vor ner Aufgabe und mir raucht der Kopf.
Hoffe jemand kann mir helfen. Erstmal die Aufgabenstellung:


Schreiben Sie eine statische Methode zaehleHaeufigkeit() in der Klasse Util.

Java:
public static Map zaehleWorte (List xs)

Die Methode zaehleHaeufigkeit ermittelt wie oft jedes Wort in der Liste vorkommt. Im Ergebnis steht als Schlüssel alle vorkommenden Worte und als Wert die Anzahl des Vorkommens.

Bsp.: Eingabe: "Otto", "Pia", "Urs", "Pia", "Urs", "Pia"
Ergebnis: ("Otto", 1), ("Pia",3), "("Urs",2)


So. First things first: Da ist wohl ein Fehler in der Angabe. (zaehleHaeufigkeit vs zahleWorte) - Ich hab ihn mal mit hier reingepostet falls das doch kein Fehler ist und ich was total verplane.


Nun also zu meiner gedachten vorgehensweise in der Methode:
- Iterator erzeugen
- map erzeugen
- Liste durchlaufen
- Abfrage für jedes Listenelement ob bereits in Map
- Falls ja: value +1
- Falls nein: Listenelement als Key zur Map hinzufügen und value auf int 1 setzten
- Map returnen

Soweit bin ich gekommen:
Java:
 public class Util{

public static Map zahleHaeufigkeit (List xs){
Map tmp = new HashMap(); // Erste Frage hier: Hash oder Treemap ? Kenne die Unterschiede theoretisch, kann mich dennoch nicht entscheiden.
Iterator it = xs.iterator(); //Zweite Frage: Könnte ich hier um mir eventuelles späteres Casten zu sparen mit Generics arbeiten, d.h. List<String> it = xs.iterator<String>(); ?

while (it.hasNext()){
if (tmp.containsKey(it.next()){
//... Dritte Frage: Wie kann ich am Value rumdrehen ? Das hier wäre nun der Fall dass z.b. "Pia" bereits in der Map ist und ich den (int)Value um 1 erhöhen möchte.
}
else{
tmp.put((String)it.next(),(int)"1"); ///Vierte Frage: Ist das hier richtig ?
}
return tmp;
}

Fragen stehen als Kommentar im Quelltext meiner (nicht vollständigen) Lösung.
Größste Fragen für mich sind:

1) Ist das oben normal das ich bis zu dem Zeitpunkt wo ich das erste mal was in die Map schreiben möchte noch garnicht festgelegt habe welches Format die Keys, welches der Value hat ? - Habe ich die Hashmap überhaupt richtig angelegt.
2) Wenn in einer Map der Key aus Strings besteht (z.B. "Pia") und der Value aus nem int wert (z.b. 1), wie kann ich auf den Value zugreifen und ihn um 1 erhöhen ?


Ich hoffe hier findet sich ein Profi mit Geduld :p
Vielen Dank im Voraus,
Julia.
 

eRaaaa

Top Contributor
1) Ist das oben normal das ich bis zu dem Zeitpunkt wo ich das erste mal was in die Map schreiben möchte noch garnicht festgelegt habe welches Format die Keys, welches der Value hat ? - Habe ich die Hashmap überhaupt richtig angelegt.
Naja, die Aufgabenstellung bzw. die Methodensignatur ist nicht so wirklich toll ohne Generics.
Aber du kannst natürlich dennoch
Code:
Map<String,Integer> map = new HashMap<String, Integer>();
schreiben...(musst dann die objekte der Liste zu String casten..)
Java:
	public static Map<String,Integer> zaehleWorte (List<String> xs){
		Map<String,Integer> map = new HashMap<String, Integer>();
o.ä. wäre wohl besser
2) Wenn in einer Map der Key aus Strings besteht (z.B. "Pia") und der Value aus nem int wert (z.b. 1), wie kann ich auf den Value zugreifen und ihn um 1 erhöhen ?
mit get(string) den Integer holen (gibts den String noch nicht wird null geliefert, dann packste einfach den String mit Value =1 rein) und dann den Integer inkrementieren und wieder mit put(string) überschreiben
 

m1k3ch3ck

Mitglied
Danke schonmal für die Antwort.
Wäre es dann so richtig:

Java:
public class Util{

public static Map zaehleHaeufigkeit(List xs){
Map<String, Integer> tmp = new HashMap<String,Integer>();
Iterator it = xs.iterator();
while (it.hasNext()){
if (tmp.containsKey(it.next()){
int x = (Integer) tmp.get(it.next());
x = x++;
tmp.put ((String)it.next(),(Integer)x);
}
else {
tmp.put ((String)it.next(),(Integer)1);
}
return tmp;
}

Zusätzliche Frage: Könnte ich dem Iterator auch Generics verpassen ? Würde das in dem konkreten Code oben was ändern ? z.B. den Integer Cast auf x ?

Und nochwas - kanns sein dass du dich oben verschrieben hast ?
Aber du kannst natürlich dennoch
Code:
Map<String,Integer> map = new HashMap<String, Integer>();
schreiben...(musst dann die objekte der Liste zu String casten..)
Java:
	public static Map<String,Integer> zaehleWorte (List<String> xs){
		Map<String,Integer> map = new HashMap<String, Integer>();
o.ä. wäre wohl besser

Wolltest du oben evtl ohne Generics schreiben, hast sie aber intuitiv schon mit reingehauen ? :D
 
Zuletzt bearbeitet:

Landei

Top Contributor
Machen wir es mal hübscher:

Java:
public static Map<String, Integer> zaehleHaeufigkeit(List<String> xs){
  Map<String, Integer> result = new HashMap<String,Integer>();
  for(String x : xs) {
     result.put(1 + (result.containsKey(x) ? result.get(x) : 0));
  }
  return result;
}
 

eRaaaa

Top Contributor
Machen wir es mal hübscher:

Java:
public static Map<String, Integer> zaehleHaeufigkeit(List<String> xs){
  Map<String, Integer> result = new HashMap<String,Integer>();
  for(String x : xs) {
     result.put(1 + (result.containsKey(x) ? result.get(x) : 0));
  }
  return result;
}


Java:
result.put(x, 1 + (result.containsKey(x) ? result.get(x) : 0));
:bae:

meine Überlegung war so etwas wie
Java:
			Integer i = null;
			result.put(x, ((i = result.get(x)) == null ? 1 : ++i));
:D

@m1k3ch3ck : Dein Code lässt sich ja noch nicht mal kompilieren (put musst du natürlich auf der Map aufrufen, der Cast mit Integer wäre so nicht notwendig(allerdings einer bei put :D )
 

m1k3ch3ck

Mitglied
@eRaaaa:

Habs oben mal editiert.
Passt das so ?

@Landei:
Danke für die Antwort, kann mir ihr nur leider nichts anfangen. Noch nie so eine For-Schleifen Bedingung, oder ein Fragezeichen in nem JavaCode gesehen. Java 1 halt ^^ :D
 

eRaaaa

Top Contributor
@eRaaaa:

Habs oben mal editiert.
Passt das so ?

Probier`s doch mal aus, aber: Nein passt nicht :)
Einmal it.next() aufrufen ! Du rufst das zu oft auf innerhalb der while-Schleife!
x=x++; <-- öhh fies... ^^

Basierend auf deinem Code wohl eher: (aber auch nur weil eh schon eine Lösung gepostet wurde *g*)
Java:
	public static Map zaehleHaeufigkeit(List xs) {
		Map<String, Integer> tmp = new HashMap<String, Integer>();
		Iterator it = xs.iterator();
		while (it.hasNext()) {
			String s = (String)it.next();
			if (tmp.containsKey(s)) {
				int x = tmp.get(s);
				tmp.put(s, ++x);
			} else {
				tmp.put(s, 1);
			}
		}
		return tmp;
	}
 

Landei

Top Contributor
@Landei:
Danke für die Antwort, kann mir ihr nur leider nichts anfangen. Noch nie so eine For-Schleifen Bedingung, oder ein Fragezeichen in nem JavaCode gesehen. Java 1 halt ^^ :D

Leider scheinen einige "Leerkörper" bei Java 1.4 stehengeblieben zu sein: Iteratoren und keine Generics...

Der Ausdruck
Java:
a = b ? c : d;
ist bloß kurz für
Java:
if (b) {
  a = c;
} else {
  a = d;
}
... nur dass man es fast "überall" verwenden kann, weil es einen Wert zurückliefert (Stichwort: ternärer Operator)
 
Zuletzt bearbeitet:

m1k3ch3ck

Mitglied
Sehr gut. Das beantwortet mit indirekt gleich eine Frage die mir immer im Kopf umherrschwirtte: Nämlich ob man Generics grundsätzlich auf Iteratoren nutzen darf oder nicht. :oops:
 

Landei

Top Contributor
Man kann (und sollte) eine Klasse mit Generics nutzen, wenn sie mit Generics definiert ist (siehe Sourcecode oder JavaDoc), so einfach ist das. Iterator wurde mit Java 1.5 "generifiziert". Ich mag die Dinger nicht, insbesondere nicht zusammen mit einer while-Schleife:

Java:
Iterator<String> it = myList.iterator();
while(it.hasNext()) {
   System.out.pritln(it.next());
}
Iterator<String> it2 = myOtherList.iterator();
while(it2.hasNext()) {
   System.out.pritln(it.next());
}
//Und, habt ihr den Fehler gefunden???
Dann schon lieber in eine for-Schleife, wo das nicht passieren kann:
Java:
for(Iterator it = myList.iterator(); it.hasNext();){
  System.out.println(it.Next());
}
Aber dann kann man auch gleich die erweiterte for-Schleife nehmen:
Java:
for(String s : myList){
  System.out.println(s);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
A Verständnisfrage Java Basics - Anfänger-Themen 12
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
P Verständnisfrage: PageFactory.initElements Java Basics - Anfänger-Themen 2
R do while Schleife Verständnisfrage Java Basics - Anfänger-Themen 2
G while.next() Verständnisfrage Java Basics - Anfänger-Themen 16
Vivien Kurze Verständnisfrage zu Java Point aus java.awt.* Java Basics - Anfänger-Themen 5
C Erste Schritte Anfänger Verständnisfrage zum Compiler Java Basics - Anfänger-Themen 31
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
P Verständnisfrage zum Mapping Java Basics - Anfänger-Themen 3
M Java Version Verständnisfrage Java Basics - Anfänger-Themen 16
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Verständnisfrage zur Konsolenausgabe Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
D Verständnisfrage zur Modellierung einer HDD Java Basics - Anfänger-Themen 17
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
S Verständnisfrage lokale Ordnerpfade Java Basics - Anfänger-Themen 1
T Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 7
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
O Anfänger, Verständnisfrage Java Basics - Anfänger-Themen 3
C Verständnisfrage zu Modulo Java Basics - Anfänger-Themen 6
C Verständnisfrage bezüglich der Do-While Schleife Java Basics - Anfänger-Themen 9
L Verständnisfrage - Speicherabbild Java Basics - Anfänger-Themen 4
melly_ Verständnisfrage zu args Java Basics - Anfänger-Themen 3
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
K Verständnisfrage eines Abschnitts Java Basics - Anfänger-Themen 6
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
JavaTalksToMe Erste Schritte Println-Frage (Verständnisfrage) Java Basics - Anfänger-Themen 1
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
G Collections Verständnisfrage zur For-Each-Schleife Java Basics - Anfänger-Themen 7
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
G Verständnisfrage zu for-each Java Basics - Anfänger-Themen 4
DontFeedTheTroll Erste Schritte Verständnisfrage zu If-Anweisung Java Basics - Anfänger-Themen 7
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
Z Verständnisfrage Anfängerprogramm Java Basics - Anfänger-Themen 0
T Verständnisfrage Zuweisungs-/arithmet. Operatoren Java Basics - Anfänger-Themen 2
G Methoden Verständnisfrage zur Methoden Java Basics - Anfänger-Themen 7
LionAge Kapselung, Verständnisfrage zur Objekterzeugung Java Basics - Anfänger-Themen 4
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
R OOP / Verständnisfrage zum Konstuktor (siehe code) Java Basics - Anfänger-Themen 7
gamebreiti Verständnisfrage zu contains() Java Basics - Anfänger-Themen 10
A Verständnisfrage - Koordinatenumrechnung Java Basics - Anfänger-Themen 9
J Erste Schritte Verständnisfrage im Bezug auf das (richtige) Programmieren Java Basics - Anfänger-Themen 5
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage Array Java Basics - Anfänger-Themen 2
I Interface Verständnisfrage Interfaces (Bsp.: Enumeration) Java Basics - Anfänger-Themen 2
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
P Verständnisfrage Java Basics - Anfänger-Themen 3
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
D Input/Output Verständnisfrage Verzeichnis-/Dateiliste erstellen & Dateikonvertierung Java Basics - Anfänger-Themen 1
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
H Verständnisfrage für oder Anweisung Java Basics - Anfänger-Themen 8
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
H Verständnisfrage zu Java-Ausgabe Java Basics - Anfänger-Themen 3
S Verständnisfrage Java Basics - Anfänger-Themen 2
N Verständnisfrage Code Java Basics - Anfänger-Themen 8
B Verständnisfrage Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Verständnisfrage Codezeile Java Basics - Anfänger-Themen 7
B Verständnisfrage:Beispielprogramm BlueJ Java Basics - Anfänger-Themen 3
M Kurze Verständnisfrage zu einer Java Aufgabe Java Basics - Anfänger-Themen 12
K Erste Schritte Kleine Verständnisfrage Java Basics - Anfänger-Themen 12
R Verständnisfrage Referenzvariablen in array Java Basics - Anfänger-Themen 3
M Verständnisfrage: Objekt erzeugen u. zuweisen Java Basics - Anfänger-Themen 16
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
S Verständnisfrage: Exception Gebrauch Java Basics - Anfänger-Themen 2
R Verständnisfrage NPE Java Basics - Anfänger-Themen 5
M Verständnisfrage zur Zahlenumwandlung (Dezimal-->Dual) Java Basics - Anfänger-Themen 25
P Java Objekte - Verständnisfrage Java Basics - Anfänger-Themen 9
N Verständnisfrage zu folgendem Programm Java Basics - Anfänger-Themen 2
L Grundlegende Verständnisfrage Hasmap Referenzen Java Basics - Anfänger-Themen 4
S Verständnisfrage zu Interfaces Java Basics - Anfänger-Themen 2
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
P Verständnisfrage zu Instanzen/Objekten Java Basics - Anfänger-Themen 9
K Verständnisfrage zu int.length und String.length() Java Basics - Anfänger-Themen 4
G 2D Array gleichsetzen verständnisfrage Java Basics - Anfänger-Themen 2
M kleine und einfache Verständnisfrage Java Basics - Anfänger-Themen 3
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
G Datentypen bits, bytes, chars - Verständnisfrage Java Basics - Anfänger-Themen 5
E Verständnisfrage zu Shutdownhook Java Basics - Anfänger-Themen 5
D Verständnisfrage: Java und MySql Java Basics - Anfänger-Themen 3
F Rekursion Verständnisfrage Java Basics - Anfänger-Themen 6
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
H Verständnisfrage Persistenz Java Basics - Anfänger-Themen 10
neurox Verständnisfrage zu Threads Java Basics - Anfänger-Themen 4
E Verständnisfrage Syntax: frame.getContentPane().add(button) Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben