在哈希映射上存储数据(While循环)

时间:2018-04-20 19:57:08

标签: java hash hashmap

嘿伙计们我正在做一个课程作业,我需要在每次用户输入主要内容时存储细节。这段代码是用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循环)中的问题还是我存储它的方式?

2 个答案:

答案 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的类型为Stringv的类型为NodeDetails。但是,我不认为这就是问题所在。