Strings aus einer ArrayList zählen

Status
Nicht offen für weitere Antworten.
X

Xendran

Gast
Hallo!
Ich habe folgendes Problem:
Ich habe eine ArrayList<String> und möchte mit Hilfe einer HashMap<String, Integer> zählen, wie oft die einzelnen Strings in der Liste vorkommen. Wie schaffe ich es, dass der int Wert hochgezählt wird?

MfG,
Xendran
 
X

Xendran

Gast
Hm, vielleicht hab ich mich falsch ausgedrückt, denn so wird ja nur gezählt, wie viele Strings insgesamt vorkommen, ich will aber wissen, wie oft die einzelnen Strings vorkommen, wenn sie denn häufiger vorkommen.
Also, sagen wir bspw. ich hab in der Liste 5 * "e" 2und 3 * "a". In der HashMap will ich also als Key e und als Value 5 haben.
So hab ichs bisher:

Code:
public static HashMap<String, Integer> statistik() {
		HashMap<String, Integer> hash = new HashMap<String, Integer>();
		ArrayList<String> ar = new ArrayList<String>();
		ar = /*bla bla, meine Liste halt*/
		for (int i = 0; i < ar.size(); i++) {
			hash.put(ar.get(i), /*keine Ahnung*/);
		}
		return hash;
	}
 
S

SlaterB

Gast
Code:
anzahl = map.getZuWort
if anzahl null
   anzahl = 1
else
   anzahl = anzahl +1

map speichere wort + anzahl
 

Murray

Top Contributor
Etwa so:
Code:
ArrayList<String> lstStr = ...;
HashMap<String,Integer> map = new HashMap<String,Integer>();
for ( String str : lstStr) {
    Integer i = map.get( str);
    if ( i == null) {
        //--- noch nicht in der Liste -> jetzt also einmal vorhanden
        i = new Integer( 1);
    } else {
        //--- Anzahl um 1 erhoehen
        i = new Integer( i.intValue()+1);
    }
    map.put( str, i);
}
for ( String key : map.keySet()) {
    System.out.println( key + ": " + map.get( key));
}
 
X

Xendran

Gast
Danke, das hat mir erstmal ein bisschen weiter geholfen, auch wenn ichs noch nicht ganz funktionierend hingekriegt habe.
 
S

SlaterB

Gast
viele new Integer( 1) -Objekte lassen sich vermeiden
-> Integer.valueOf(1)

geht für alle Zahlen bis 128 daher auch für den else-Fall geeignet,
bei höheren Zahlen macht valueOf letztlich auch ein new Integer()
 

Leroy42

Top Contributor
SlaterB hat gesagt.:
viele new Integer( 1) -Objekte lassen sich vermeiden
-> Integer.valueOf(1)

geht für alle Zahlen bis 128 daher auch für den else-Fall geeignet,
bei höheren Zahlen macht valueOf letztlich auch ein new Integer()

Jein! Auch new Integer(n) nutzt für kleine n den internen Pool
==> Es macht keinen Unterschied.
 

Marco13

Top Contributor
Nur aus Neugier: Was veranlaßt dich zu dieser aussage?
Code:
   /**
     * Constructs a newly allocated <code>Integer</code> object that
     * represents the specified <code>int</code> value.
     *
     * @param   value   the value to be represented by the 
     *			<code>Integer</code> object.
     */
    public Integer(int value) {
	this.value = value;
    }

new heißt new - ich denke, da ist nichts mit einem Pool.

Code:
   /**
     * Returns a <tt>Integer</tt> instance representing the specified
     * <tt>int</tt> value.
     * If a new <tt>Integer</tt> instance is not required, this method
     * should generally be used in preference to the constructor
     * {@link #Integer(int)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  i an <code>int</code> value.
     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
	final int offset = 128;
	if (i >= -128 && i <= 127) { // must cache 
	    return IntegerCache.cache[i + offset];
	}
        return new Integer(i);
    }

Was mich irritert ist, dass dort von performancegewinnen bei "häufig verwendeten Werten" die Rede ist - dort aber offenbar nur bestimmte (kleine) Werte gecacht werden... ???:L
 
S

SlaterB

Gast
wie man an obiger Anwendung sieht sind da die kleinen Zahlen doch offensichtlich die richtigen ;)
wenns drauf ankommt einfach selber ein Array anlegen ;)

@Leroy:
bei mir nicht ;(

Code:
public class Test
{


    public static void main(String[] args)
        throws Exception

    {
        int anz = 80000000;
        long time = 0;

        time = System.currentTimeMillis();
        for (int i=0; i<anz; i++) {
            new Integer(1556);
        }
        System.out.println("time: "+(System.currentTimeMillis()-time));

        time = System.currentTimeMillis();
        for (int i=0; i<anz; i++) {
            new Integer(1);
        }
        System.out.println("time: "+(System.currentTimeMillis()-time));
        time = System.currentTimeMillis();
        for (int i=0; i<anz; i++) {
            Integer.valueOf(1);
        }
        System.out.println("time: "+(System.currentTimeMillis()-time));
        


    }


}

->
time: 1297
time: 1265
time: 204
 

The_S

Top Contributor
Das ist doch mal was für die Performance-Ecke!

SlaterB hat gesagt.:
Code:
public class Test
{


    public static void main(String[] args)
        throws Exception

    {
        int anz = 80000000;
        long time = 0;

        time = System.currentTimeMillis();
        for (int i=0; i<anz; i++) {
            new Integer(1556);
        }
        System.out.println("time: "+(System.currentTimeMillis()-time));

        time = System.currentTimeMillis();
        for (int i=0; i<anz; i++) {
            new Integer(1);
        }
        System.out.println("time: "+(System.currentTimeMillis()-time));
        time = System.currentTimeMillis();
        for (int i=0; i<anz; i++) {
            Integer.valueOf(1);
        }
        System.out.println("time: "+(System.currentTimeMillis()-time));
        


    }


}

->
time: 1297
time: 1265
time: 204

:applaus: :toll:
 

Leroy42

Top Contributor
Leroy42 hat gesagt.:
Jein! Auch new Integer(n) nutzt für kleine n den internen Pool
==> Es macht keinen Unterschied.

Marco13 und SlaterB haben natürlich Recht.
Ich weiß auch nicht, wo ich meinte das mal in
den Sourcen gesehen zu haben.

Am peinlichsten ist jedoch, das ich nicht darauf gekommen bin,
das es (in Java) gar nicht funktionieren kann, daß ein
Konstruktor eine andere Instanz liefert. :oops:

In die Ecke gehen und mich schämen, mache ich allerdings jetzt
nicht, da ich, in weiser Voraussicht( :cool: ), micht bereits gestern
vormittag selbst gegeißelt habe. :(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
A Auslesen von Strings aus einer xls-Datei Allgemeine Java-Themen 16
B Speichern von Strings in einer txt-Datei Allgemeine Java-Themen 3
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
N MySQL mit Strings Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
P Strings: equals vs == Allgemeine Java-Themen 47
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
Meeresgott Best Practice Strings auf Inhalte vergleichen Allgemeine Java-Themen 1
N DNA Strings vergleichen Allgemeine Java-Themen 1
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
J Strings int textdokumente speicher Allgemeine Java-Themen 3
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
A Vector Strings in Array splitten Allgemeine Java-Themen 6
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
H Strings vergleichen Allgemeine Java-Themen 9
O Mustererkennung in Strings Allgemeine Java-Themen 4
Y String-Collection: längste gemeinsame Strings / Prefixe Allgemeine Java-Themen 3
F Problem mit Strings Allgemeine Java-Themen 8
D Strings chemisch splitten Allgemeine Java-Themen 3
K Wörter in Strings zählen Allgemeine Java-Themen 7
L Strings nach sortiertem String zurück ordnen Allgemeine Java-Themen 0
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
D Strings vergleichen; Komma ignorieren Allgemeine Java-Themen 3
K Java Operatoren mit Strings darstellen Allgemeine Java-Themen 8
G Strings erzeugen Allgemeine Java-Themen 20
B HTML Tags in Strings umwandeln Allgemeine Java-Themen 4
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
A ,,Textformatierungsbefehle" für strings deaktivieren Allgemeine Java-Themen 8
S Strings vergleichen Allgemeine Java-Themen 11
C Strings in Excel einlesen! Allgemeine Java-Themen 2
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
J String zerlegen in einzelne Strings Allgemeine Java-Themen 7
F Konstanten mir Strings "verknuepfen" Allgemeine Java-Themen 10
1 zwei Strings vergleichen Allgemeine Java-Themen 16
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
S vector & strings Allgemeine Java-Themen 26
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
P Codierung der strings umändern Allgemeine Java-Themen 10
F 2 Strings zusammenfügen Allgemeine Java-Themen 2
D Strings von HTML befreien Allgemeine Java-Themen 17
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
C Strings zwischen 2 Zeichen auslesen Allgemeine Java-Themen 7
T Explizite Typkonversation mit Strings Allgemeine Java-Themen 9
R Locale spezifische DateFormat Strings? Allgemeine Java-Themen 3
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
R Java function die Strings escaped, sodass ich sie in Javascript verwenden kann? Allgemeine Java-Themen 4
ruutaiokwu objektreferenz eines strings... Allgemeine Java-Themen 9
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
S bestimmte Strings spliten! Allgemeine Java-Themen 7
M Warum Strings mit equals vergleichen... Allgemeine Java-Themen 6
Daniel_L Suche nach ganzen Wörtern (wholeword) in Strings? Allgemeine Java-Themen 4
A Strings joinen, Standard-Library? Allgemeine Java-Themen 9
Y Mal wieder vergleichen von Strings.[Leider noch ein Problem] Allgemeine Java-Themen 18
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G Spezialfrage zu Strings Allgemeine Java-Themen 11
C Textteile aus Strings extrahieren? Allgemeine Java-Themen 6
J Teile eines Strings ersetzen Allgemeine Java-Themen 2
G schnell Strings vergleichen Allgemeine Java-Themen 4
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
G Strings zerlegen und substrings auslesen Allgemeine Java-Themen 2
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
V Speicherplatz eines Strings? Allgemeine Java-Themen 12
H MIDlets und Strings Allgemeine Java-Themen 2
C Pixelanzahl eines Strings ermitteln Allgemeine Java-Themen 12
T Strings darf nur Ziffern, +/- haben Allgemeine Java-Themen 9
A Fehler beim Ersetzen eines Strings Allgemeine Java-Themen 3
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
H strings in datei verschlüsseln , auslesen mit klartext aber! Allgemeine Java-Themen 2
F Strings in JList ausrichten/links/rechts/mittig Allgemeine Java-Themen 10
M String#equals(), Probleme mit großen Strings? Allgemeine Java-Themen 4
H ein Teil des Strings rausfiltern Allgemeine Java-Themen 8
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
C Strings zu groß um damit zu arbeiten Allgemeine Java-Themen 31
V Lib für Strings suchen und ersetzen (erweitert) Allgemeine Java-Themen 3
P Schnelles Auslesen von Strings für Syntaxhighlighting? Allgemeine Java-Themen 2
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
G Datei zeilenweise in Strings speichern Allgemeine Java-Themen 36
S Methode zum Zählen von Buchstaben in Strings gesucht Allgemeine Java-Themen 11
I vergleich und zählen von Strings Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben