2011-04-22 40 views
9

Tengo un proyecto en el que estoy trabajando para mi clase Java (obviamente) y debo haber perdido la conferencia sobre cómo interactuar con TreeMaps. No tengo idea de lo que estoy haciendo con esta parte y no encuentro mucha ayuda de Google.¿Cómo imprimiría todos los valores en un TreeMap?

Para el primer caso en el programa, tengo que imprimir todos los valores de un TreeMap. El siguiente es el código que me proporcionaron y el trabajo que he hecho con él. Todo en caso de que A sea mío, pero no funciona. Cualquier ayuda sería apreciada.

import java.util.Scanner; 
import java.util.Set; 
import java.util.Map; 
import java.util.TreeMap; 
import java.io.File; 
import java.io.FileNotFoundException; 

public class prog7 { 
public static void main(String args[]) 
throws FileNotFoundException 
{ 
Scanner kb=new Scanner(System.in); 

/*here, add code to declare and create a tree map*/ 
TreeMap treeMap = new TreeMap(); 

/*here, add code to declare a variable and 
let it be the key set of the map 
*/ 
String key; 

//temporary variables 
String tempWord; 
String tempDef; 

//the following code reads data from the file glossary.txt 
//and saves the data as entries in the map 
Scanner infile=new Scanner(new File("glossary.txt")); 

while(infile.hasNext()) 
{ 
    tempWord=infile.nextLine(); 
    tempDef=infile.nextLine(); 

    /*here, add code to add tempWord and tempDef 
    as an entry in the map 
    */ 
    treeMap.put(tempWord, tempDef); 

} 
infile.close(); 

while(true) 
{ 
    System.out.println(); 
    System.out.println(); 

    //show menu and prompt message 
    System.out.println("Please select one of the following actions:"); 
    System.out.println("q - Quit"); 
    System.out.println("a - List all words and their definitons"); 
    System.out.println("b - Enter a word to find its definition"); 
    System.out.println("c - Add a new entry"); 
    System.out.println("d - Delete an entry"); 
    System.out.println("Please enter q, a, b, c or d:"); 

    String selection=kb.nextLine(); //read user's selection 
    if (selection.equals("")) continue; //if selection is "", show menu again 

    switch (selection.charAt(0)) 
    { 
    case 'q': 
     System.out.println("\nThank you."); 
     return; 

     /*write code for the cases 'a','b','c' and 'd' 
     so that the program runs as in the sample run 
     */ 

    case 'a': 
     for (String treeKey : treeMap.keySet()) 
      System.out.println(treeKey); 


    break; 
+0

1 para el uso de la etiqueta de la tarea y publicar el código que tiene hasta ahora. –

Respuesta

1
for (String treeKey : treeMap.keySet()) 

que le da las llaves.

Ahora en ese ciclo, obtenga cada valor del treeMap usando la clave (treeKey), e imprímalo.

0

Puede usar treeMap.get(treeKey) dentro de su bucle para obtener el valor de la clave. Dado que este valor es una cadena, sólo podría hacer algo como:

System.out.println("The value for the current key is " + (String)treeMap.get(treeKey)); 
+0

Ahhh. Así que los imprimía todos de la misma manera que imprimía solo uno después de una búsqueda. Ya veo. Es muy obvio. A veces me pregunto por qué soy estudiante de informática cuando tengo momentos como este. – Lish

+0

@Lish - Sí, ofrezco un ejemplo de impresión en mi última edición para que pueda ver cómo hacerlo. Espero que sea útil. – dcp

+0

@Lish - De nada. Buena suerte con la tarea. – dcp

13

iterar sobre la entrySet en lugar del conjunto de claves. Obtiene un conjunto de Map.Entry<K, V> que tienen métodos convenientes getKey() y getValue().

Dicho esto, las implementaciones de mapas estándar de Java tienen una implementación de toString() que hace lo que usted desea. Por supuesto, creo que sólo obtendrá puntos para reimplementar ella, no para evitar que inteligentemente ...

for (Map.Entry<K, V> entry : myMap.entrySet()) { 
    System.out.println("Key: " + entry.getKey() + ". Value: " + entry.getValue()); 
} 
+0

¿Es entrySet parte de la clase Set? No puedo agregar ninguna clase adicional al programa. – Lish

+0

No, es parte del mapa: http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html#entrySet%28%29 –

+0

ahh. Interesante. Debería intentar eso si no puedo hacer que funcione algo más. Quiero intentar y atenerme a lo que el profesor espera tanto como pueda. Gracias por el aviso, sin embargo. Definitivamente lo investigaré más si no lo uso ahora. – Lish

0

iteración sobre el conjunto de teclas y luego recuperar cada valor es menos eficiente que la iteración sobre el conjunto de entradas (getEntries()). En el primer caso, getValue() tendrá que realizar una nueva búsqueda cada vez, mientras que getEntries() puede simplemente devolver todo el contenido del mapa.

Los analizadores estáticos como FindBugs le darán una advertencia si intenta recuperar un valor dentro de una iteración sobre las teclas del mapa.

+0

¿Necesito hacer el objeto treeMap de otro tipo en ese caso? Recibo el siguiente error si intento usar ese comando: 'Archivo: Z: \ CS121 \ Project 7 \ prog7.java [línea: 79] Error: Z: \ CS121 \ Project 7 \ prog7.java : 79: no se puede encontrar el símbolo símbolo: método getEntries() ubicación: clase java.util.TreeMap' – Lish

+1

Lo siento. El método se llama 'entrySet'. Pero honestamente, deberías haber podido encontrarlo tú mismo. Los documentos API para la clase Map no son difíciles de encontrar. – JesperE

6

Puede usar entrySet(). Todos los mapas en java tienen este método.

Map<String, String> tree = new TreeMap<String, String>(); 
tree.put("param1", "value1"); 
tree.put("param2", "value2"); 
for (Entry<String, String> entry : tree.entrySet()) { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 

    System.out.printf("%s : %s\n", key, value); 
} 
Cuestiones relacionadas