Как бы я распечатать все значения в TreeMap? - PullRequest
10 голосов
/ 22 апреля 2011

У меня есть проект, над которым я работаю для своего класса Java (очевидно), и я, должно быть, пропустил лекцию о том, как взаимодействовать с TreeMaps. Я понятия не имею, что я делаю с этой частью, и я не нахожу большую помощь от Google.

Для первого случая в программе я должен распечатать все значения TreeMap. Ниже приведен код, который мне предоставили, и работа, которую я проделал с ним. Все в случае, если это мое, но это не работает. Любая помощь будет оценена.

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;

Ответы [ 6 ]

14 голосов
/ 22 апреля 2011

Перебор набора записей, а не набора ключей.Вы получаете набор Map.Entry<K, V>, который имеет удобные методы getKey() и getValue().

При этом стандартные реализации Map Java имеют реализацию toString (), которая делает то, что вы хотите.Конечно, я полагаю, что вы получите очки только за то, что реализовали это, а не за то, что умело избежали этого ...

for (Map.Entry<K, V> entry : myMap.entrySet()) {
     System.out.println("Key: " + entry.getKey() + ". Value: " + entry.getValue());
}
6 голосов
/ 22 апреля 2011

Вы можете использовать entrySet ().У каждой карты в Java есть этот метод.

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);
}
1 голос
/ 22 апреля 2011
for (String treeKey : treeMap.keySet())

Это дает вам ключи.

Теперь в этом цикле получите каждое значение из treeMap, используя ключ (treeKey), и распечатайте его.

0 голосов
/ 20 октября 2015

не конкретно о TreeMaps, а о Картах в целом - мне нравится этот первый ответ, используя Guava : Преобразование Java-карты в пользовательский ключ = строка значения

0 голосов
/ 22 апреля 2011

Перебор набора ключей с последующим извлечением каждого значения менее эффективен, чем перебор набора записей (getEntries()). В первом случае getValue() будет каждый раз выполнять новый поиск, а getEntries() может просто возвращать все содержимое карты.

Статические анализаторы, такие как FindBugs, будут предупреждать вас, если вы попытаетесь получить значение внутри итерации по ключам карты.

0 голосов
/ 22 апреля 2011

Вы можете использовать treeMap.get(treeKey) внутри цикла, чтобы получить значение для ключа.Поскольку это значение является строкой, вы можете просто сделать что-то вроде:

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