Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Χαίρεται,

 

πρέπει να χρηισμοποιήσω hashmap για αποθήκευση λέξεων ώστε να μετράω μετά πόσες φορές εμφανίστηκε μια λέξη σε ένα κείμενο. Η ερώτηση μου είναι ως key να βάλω την κάθε λέξη η κάποιο id? Η ίσως το count Που είναι πόσες φορές μετριέται η λέξη;

 

ευχαριστώ :)

Δημοσ.

Αν για εσένα η λέξη είναι το κλειδί ή μήπως θέλεις να μετράς ομόριζα/κλίσεις/αριθμό ; Αν δεν σε νοιάζει η μορφή της λέξης πιο απλό φαίνεται να κάνεις Map<String, Integer> για τον μετρητή στην κάθε λέξη..

  • Like 1
Δημοσ.

Απλό κείμενο είναι με λέξεις τίποτα ιδιαίτερο...ούτε κλίσεις ούτε τίποτα...επίσης να ρωτήσω, όταν διαπαιρνώ το hashmap με foreach() δεν μπορώ ν διαγράφω ε; Υπάρχει κανα κολπάκι εδω; Πως μπορείς να το διαπερνάς και να διαγράφεις ταυτόχρονα; :/

Δημοσ.

Απλό κείμενο είναι με λέξεις τίποτα ιδιαίτερο...ούτε κλίσεις ούτε τίποτα...επίσης να ρωτήσω, όταν διαπαιρνώ το hashmap με foreach() δεν μπορώ ν διαγράφω ε; Υπάρχει κανα κολπάκι εδω; Πως μπορείς να το διαπερνάς και να διαγράφεις ταυτόχρονα; :/

 

Με Iterator, πχ:

HashMap<String, String> map = new HashMap<String, String>();
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

while (it.hasNext()) {
	Map.Entry e = it.next();
        if(getCondition())
            it.remove();
}

Δημοσ.

Χτυπάει λάθος στο παρακάτω δεν μπορώ να καταλάβω γιατί...απο το πρωί προσπαθώ να ξεκολλήσω και δεν μου βγαίνει ρε γμτ...

HashMap<Integer, String> myMap = new HashMap<Integer, String>();

Iterator it = myMap.entrySet().iterator();
        
while(it.hasNext()) {
    Map.Entry entry = it.next();

....

Document.java:34: error: cannot find symbol
                        System.out.println(val+"<< | >>"+keyword);
                                           ^
  symbol:   variable val
  location: class Document

ένας πιο ολοκληρωμένος κώδικας:
 

Iterator<Map.Entry<Integer, String>> it = myMap.entrySet().iterator();

		int wordCounter = 0;
		int currentKey = 0;
		//for(int i=0; i<myMap.size(); i++){
		while(it.hasNext()) {
			Map.Entry entry = it.next();
			if(entry.getValue().equals(keyword)) {
				it.remove();
				break;
			}
		}

και χτυπάει: Exception in thread "main" java.util.ConcurrentModificationException ...

Δημοσ.


List<String> toRemove = new ArrayList();

for (String s : map.keySet())
{
    if (map.get(s) ...)
    {
        toRemove.add(s);
    }
}

for (String s : toRemove)
{   
map.remove(s);
}

 

Δημοσ.

nilosgr είσαι σίγουρος πως παίζει αυτό;  Σε μια προηγούμενη version νομίζω το είχα υλοποιήσει έτσι και δεν μπορείς να κάνεις remove όταν Κάνεις iterate σε ένα Hashset.

Δημοσ.

Χτυπάει λάθος στο παρακάτω δεν μπορώ να καταλάβω γιατί...απο το πρωί προσπαθώ να ξεκολλήσω και δεν μου βγαίνει ρε γμτ...

HashMap<Integer, String> myMap = new HashMap<Integer, String>();

Iterator it = myMap.entrySet().iterator();
        
while(it.hasNext()) {
    Map.Entry entry = it.next();

....

Document.java:34: error: cannot find symbol
                        System.out.println(val+"<< | >>"+keyword);
                                           ^
  symbol:   variable val
  location: class Document

ένας πιο ολοκληρωμένος κώδικας:

 

Iterator<Map.Entry<Integer, String>> it = myMap.entrySet().iterator();

		int wordCounter = 0;
		int currentKey = 0;
		//for(int i=0; i<myMap.size(); i++){
		while(it.hasNext()) {
			Map.Entry entry = it.next();
			if(entry.getValue().equals(keyword)) {
				it.remove();
				break;
			}
		}

και χτυπάει: Exception in thread "main" java.util.ConcurrentModificationException ...

 

Κάνεις τίποτα με Threads? Δοκίμασε ConcurrentHashmap

 

Επίσης ίσως στο Map.Entry entry = it.next(); να είναι καλύτερα Map.Entry<Integer, String> αν και δεν θα έπρεπε κανονικά να στο πετάει το exception...μήπως προσπαθείς πουθενά αλλού να κάνεις remove απο το Map.

Δημοσ.

Όχι δεν ασχολούμαι με threads...προσπαθώ βρε παιδιά να υλοποιήσω τρελά απλά πράγματα...αλλά δεν βγαίνουν !!!!! :|

Δημοσ.

nilosgr είσαι σίγουρος πως παίζει αυτό;  Σε μια προηγούμενη version νομίζω το είχα υλοποιήσει έτσι και δεν μπορείς να κάνεις remove όταν Κάνεις iterate σε ένα Hashset.

Σωστα νομιζεις, αλλα εδώ κανει remove απο το map στο iterate της λιστας.

Δημοσ.

1. Αν θές να κάνεις remove από λίστα τότε θα την προσπελάσει με for και θα κάλέσεις remove(i)

 

2. Όσον αφορά το hashmap to key πρεπει να είναι μοναδικό. Οπότε βάζεις για key την λέξη και να σου επιστρέφει ένα αριθμό που είναι το ποσες φορές εμαφνήστικε. π.χ.

HashMap<String, Integer> myMap = new HashMap<String, Integer>();

String word ="word";

if(myMap.keySet().contains(word)){
Integer count = myMap.remove(word);
myMap.put(word,count++);
}
else{
myMap.put(word,1);
}
Δημοσ.

nilosgr είσαι σίγουρος πως παίζει αυτό;  Σε μια προηγούμενη version νομίζω το είχα υλοποιήσει έτσι και δεν μπορείς να κάνεις remove όταν Κάνεις iterate σε ένα Hashset.

Δωσε βαση στην λιστα που εχω. Πρωτα κανω iterate το map, κρατωντας ολα τα κλειδια που θελω να σβησω και μετα κανω iterate τη λιστα και σβηνω τις εγγραφες απ το map

Δημοσ.

Προφανώς κάτι άλλο κάνεις ανάμεσα, φαίνεται και από τη στοίχιση του κώδικα που παραθέτεις. Σκέτος ο ακόλουθος κώδικας δουλεύει μια χαρά:

        HashMap<Integer, String> myMap = new HashMap<>();
        myMap.put(1, "a");
        myMap.put(2, "b");
        myMap.put(3, "c");
        
        Iterator<Map.Entry<Integer, String>> it = myMap.entrySet().iterator();
        
        while (it.hasNext())  {
            Map.Entry<Integer, String> entry = it.next();
            if (entry.getValue().equals("b"))  {
                it.remove();
                break;
            }
        }

  • Like 1
Δημοσ.

Σας ευχαριστώ παιδιά. Μόνο αυτό έκανα...το θέμα είναι οτι ήταν σε μια μέθοδο και αυτό που την καλούσε έκανε και άλλο loop...anyway thx :D

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...