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

[Λύθηκε] Δομή Java για ταξινόμηση


Evangeli

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

Δημοσ.

Καλημέρα

Ποια δομή της Java θα μπορούσε να με βοηθήσει προκειμένου να ταξινομήσω τα ακόλουθα δεδομένα?

 

>var 52
new 28
end 79
width 62
start 37
var 69
new 61
start 28
...

 

σε

 

>var 52 + 69
new 28 + 61
end 79 + 0
width 62 + 0
start 37 + 28
...

 

Κάτι σε ArrayList ή HashTable πάζει, η βλακίες λέω?

 

Βαγγέλης.

Δημοσ.

Χμ..Μπορεις με hashmap αλλα οχι το απλο καποιο SortedMap .Φτιαχνεις και εναν comparator και εισαι κομπλε..

 

---------- Το μήνυμα προστέθηκε στις 13:52 ----------

 

υ.γ Δες το TreeMap

Δημοσ.
υ.γ Δες το TreeMap

 

Ο ακόλουθός κώδικας είναι πολύ κοντά σε αυτό που ψάχνω. Αλλά αντιμετωπίζω δυο πρόβλημα:

1) Γιατί η set.contains(); δεν μου δουλεύει σωστά?

2) Τι τροποποίηση χρειάζεται στο κομμάτι double balance = ((Double)tm.get("John Doe")).doubleValue(); αν θέλω η ταξινόμηση να γίνεται με βάση την τιμή?

 

Παρατηρείστε ότι σε αυτή την περίπτωση η εισαγωγή των δεδομένων θα γίνεται: tm.put(new Double(99.22), "Todd Hall"); αντί για

tm.put("Todd Hall", new Double(99.22));

 

Βαγγέλης

 

 

 

>
package treemapdemo;

import java.util.*;

class TreeMapDemo {
   public static void main(String args[]) {
       // Create a tree map
       TreeMap tm = new TreeMap();

       // Put elements to the map
       tm.put("John Doe", new Double(3434.34));
       tm.put("Tom Smith", new Double(123.22));
       tm.put("Jane Baker", new Double(1378.00));
       tm.put("Todd Hall", new Double(99.22));
       tm.put("Ralph Smith", new Double(-19.08));

       // Get a set of the entries
       Set set = tm.entrySet();

       // Get an iterator
       Iterator i = set.iterator();

       // Display elements
       while(i.hasNext()) {
           Map.Entry me = (Map.Entry)i.next();
           System.out.print(me.getKey() + ": ");
           System.out.println(me.getValue());
       }
       System.out.println();

       // Deposit 1000 into John Doe's account
       double balance = ((Double)tm.get("John Doe")).doubleValue();
       tm.put("John Doe", new Double(balance + 1000));
       System.out.println("John Doe's new balance: " +
       tm.get("John Doe") + "\n");

       if (set.contains("John Doe"))
           System.out.println("Found!\n");
       else
           System.out.println("Not Found!\n");
       
       // Get an iterator
       i = set.iterator();

       // Display elements
       while(i.hasNext()) {
           Map.Entry me = (Map.Entry)i.next();
           System.out.print(me.getKey() + ": ");
           System.out.println(me.getValue());
       }
   }
}

Δημοσ.
Για να σε βοηθησω θες η ταξινόμιση να γίνεται βαση της τιμης Double που δινεις;

 

---------- Το μήνυμα προστέθηκε στις 16:06 ----------

 

http://www.manticmoo.com/articles/jeff/programming/java/sorting-maps-by-value.php

 

Δες και αυτο...

 

Ναι ακριβώς. Κοίτα, βασικά επειδή είναι πολύ πληροφορία μαζεμένη, μπορείς να μου απαντήσεις στα δυο αυτά ερωτήματα?

Δημοσ.
Δεν γινεται με τον τροπο που εγραψες... αρα δεν υπαρχει καποια απαντηση!

 

Τι ακριβώς δεν γίνεται? Η ταξινόμηση με βάση την τιμή πραγματοποιείται κανονικότατα αν εισάγουμε τα δεδομένα μας με τον εξής τρόπο: tm.put(new Double(99.22), "Todd Hall");

 

Το θέμα είναι

1) γιατί δεν μου δουλεύει αυτό?

if (set.contains("John Doe"))

System.out.println("Found!\n");

2) πως ανακτώ την τιμή 99.22 δίνοντας σας input το "Todd Hall"

 

---------- Το μήνυμα προστέθηκε στις 16:46 ----------

 

Σόρρυ που επιμένω αλλα εσύ ο ίδιος μου είπεσ στην αρχή οτι η λύση είναι με TreeMap!

 

>υ.γ Δες το TreeMap

Δημοσ.

Λοιπόν, τελικά το πρόβλημα λύθηκε. Ουσιαστικά, έπειτα από κάποιες πατέντες, ο κώδικας που ζητούσα ήταν ο ακόλουθος:

 

>/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package treemapdemo;

/**
*
* @author Euangelos
*/

// Use Generic TreeMap to store Integer as key and String as value
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class test {
   public static void main(String[] args) {
       int newKey = 17;
       String newValue = "One";

       Map<Integer, String> map = new TreeMap<Integer, String>();
       
       // Add Items to the TreeMap
       map.put(new Integer(1), "One");
       map.put(new Integer(2), "Two");
       map.put(new Integer(3), "Three");
       map.put(new Integer(4), "Four");
       map.put(new Integer(5), "Five");
       map.put(new Integer(6), "Six");
       map.put(new Integer(7), "Seven");
       map.put(new Integer(8), "Eight");
       map.put(new Integer(9), "Nine");
       map.put(new Integer(10), "Ten");

       // Use iterator to display the keys and associated values
       System.out.println("Map Values Before: ");
       Set keys = map.keySet();
       
       for (Iterator i = keys.iterator(); i.hasNext() {
           Integer key = (Integer) i.next();
           String value = (String) map.get(key);
           System.out.println(key + " = " + value);
       }

       keys = map.keySet();
       
       for (Iterator i = keys.iterator(); i.hasNext() {
           Integer key = (Integer) i.next();
           String value = (String) map.get(key);
           
           if ( value.equals(newValue) ) {
               // Remove the entry with key "key"
               System.out.println("\nRemove element with key: " + key + " and value " + value + "!");
               map.remove(new Integer(key));

               // Use intValue method of Integer class to convert it into int type.
               newKey += key.intValue();
               newValue = value;

               // Add Items to the TreeMap
               System.out.println("Add element with key: " + newKey + " and value " + newValue + "!");
               map.put(new Integer(newKey), newValue);

               break;
           }
       }
       
       // Use iterator to display the keys and associated values
       System.out.println("\nMap Values After: ");
       
       keys = map.keySet();
       for (Iterator i = keys.iterator(); i.hasNext() {
           Integer key = (Integer) i.next();
           String value = (String) map.get(key);
           System.out.println(key + " = " + value);
       }
   }
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...