嘿伙计们我正在做一个课程作业,我需要在每次用户输入主要内容时存储细节。这段代码是用java编写的。问题是我并不完全理解HashMap的工作原理......
这是我的主要计划:
Parent
这是我的类SortNodeDetails:
SortNodeDetails sort = new SortNodeDetails();
sort.AddNodeDetails(typeMessage, nodeName, ip, nPort, rCapacity, resources);
sort.printUnsorted();
我的NodeDetails是一个基本类:
public class SortNodeDetails {
static int alph = 0;
public static boolean ASC = true;
Map<String, NodeDetails> unsortMap = new HashMap<>();
void AddNodeDetails(String typeMessage, String nodeName, String ip, String nPort, int rCapacity, String resources) {
NodeDetails node = new NodeDetails(typeMessage, nodeName, ip, nPort, rCapacity, resources);
alph++;
String numberAsString = Integer.toString(alph);
unsortMap.put(numberAsString, node);
}
void printUnsorted() {
printMap(unsortMap);
}
public static void printMap(Map<String, NodeDetails> map)
{
for (Map.Entry<String, NodeDetails> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue().getNPort());
}
}
目前,此代码仅打印最后一个输入,而不是打印存储在哈希映射中的所有输入。 是我的打印(for循环)中的问题还是我存储它的方式?
答案 0 :(得分:0)
您在地图中添加了一个条目
所以你按预期循环一次。
实际上,您只打印您创建的port
实例的NodeDetails
字段,并将其作为值添加到地图中:
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue().getNPort());
要创建代表NodeDetails
对象的字符串,请覆盖toString()
中的NodeDetails
并直接传递println()
中的对象:
System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue());
答案 1 :(得分:0)
根据我对您的代码的理解,您的main
方法应该如下所示:
public static void main(String[] args) {
SortNodeDetails sort = new SortNodeDetails();
while(condition) {
/*
* set user inputs to typeMessage, nodeName, ip, nPort, rCapacity, and resources
*/
sort.AddNodeDetails(typeMessage, nodeName, ip, nPort, rCapacity, resources);
}
sort.printUnsorted();
}
但是,因为您没有提供有关main
方法外观的详细信息,所以我无从得知。如果您拥有所提供的代码,那么main
方法如下所示:
public static void main(String[] args) {
while(condition) {
/*
* set user inputs to typeMessage, nodeName, ip, nPort, rCapacity, and resources
*/
}
SortNodeDetails sort = new SortNodeDetails();
sort.AddNodeDetails(typeMessage, nodeName, ip, nPort, rCapacity, resources);
sort.printUnsorted();
}
(这是我对您的描述的解释)然后您只会在HashMap
中看到一个项目,因为您只在一次拨打AddNodeDetails
时添加了一个项目。
为了打印Map,我希望你现在使用Java 8 :)如果是这样,你可以使用forEach
+ lambda表达式打印Map。
map.forEach((k,v)->System.out.println("Key : " + k + " Value : " + v.getNPort()));
k
的类型为String
,v
的类型为NodeDetails
。但是,我不认为这就是问题所在。