我有一个项目,我正在为我的Java类工作(很明显),我一定错过了关于如何与TreeMaps交互的讲座。我不知道我正在做什么这个部分,我没有从谷歌那里找到很多帮助。
对于程序中的第一种情况,我必须打印TreeMap的所有值。以下是我提供的代码以及我用它完成的工作。案件A的一切都是我的,但它不起作用。任何帮助,将不胜感激。
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 :(得分:14)
迭代entrySet而不是keySet。您获得了一组Map.Entry<K, V>
,其中包含方便的getKey()
和getValue()
方法。
也就是说,Java的标准Map实现有一个toString()的实现,可以实现你想要的。当然,我认为你只会获得重新实现它的积分,而不是巧妙地避免它...
for (Map.Entry<K, V> entry : myMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ". Value: " + entry.getValue());
}
答案 1 :(得分:6)
您可以使用entrySet()。 java中的每个Map都有这种方法。
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);
}
答案 2 :(得分:1)
for (String treeKey : treeMap.keySet())
这会给你钥匙。
现在在该循环中,使用密钥(treeMap
)从treeKey
获取每个值,然后将其打印出来。
答案 3 :(得分:0)
您可以在循环中使用treeMap.get(treeKey)
来获取密钥的值。由于此值是一个字符串,您可以执行以下操作:
System.out.println("The value for the current key is " + (String)treeMap.get(treeKey));
答案 4 :(得分:0)
迭代密钥集然后检索每个值的效率低于迭代条目集(getEntries()
)。在前一种情况下,getValue()
每次都必须执行新的查找,而getEntries()
只能返回地图的全部内容。
如果您试图通过地图的键检索迭代内的值,FindBugs等静态分析器会给您一个警告。
答案 5 :(得分:0)
不是专门针对TreeMaps,而是关于一般地图 - 我喜欢第一个答案,使用番石榴:Convert java Map to custom key=value string
答案 6 :(得分:0)
Java 8+ 不需要循环:lambda 表达式使您能够以简洁的单行方式打印所有键和/或值:
map.forEach((key, value) -> System.out.println(key + " " + value));