首页 > 解决方案 > 我可以保证 HashMap 的 entrySet() 的这种排序吗?

问题描述

我正在扩展 aHashMap以实现一个记录方程求解步骤的类:

public class SolutionSteps extends HashMap<Integer, String>
{
    private int currentStep;

    public SolutionSteps ()
    {
        super();
        currentStep = 1;
    }

    public final void addStep (@NotNull final String value)
    {
        put(currentStep, value);
        currentStep++;
    }

    @Override
    @NotNull
    public final String toString ()
    {
        StringBuilder sb = new StringBuilder(50 * size());

        for(Entry<Integer, String> entry : entrySet())
        {
            sb.append(entry.getKey()).append(": " ).append(entry.getValue()).append('\n');
        }

        return sb.toString().trim();
    }
}

到目前为止,我在测试时这些条目的顺序没有问题 - 我将添加测试条目,并将toString()以正确的顺序和编号打印出来,即

SolutionSteps steps = new SolutionSteps();
steps.addStep("First");
steps.addStep("Second");
steps.addStep("Third");
steps.addStep("Fourth");
steps.addStep("Fifth");

将按预期顺序生成输出:

1: First
2: Second
3: Third
4: Fourth
5: Fifth

我的问题是,输入集的这种排序是否得到保证

标签: javahashmap

解决方案


我的问题是,输入集的这种排序是否得到保证?

绝对不是,相反。a 的顺序HashMap任意的,插入新元素可能会改变顺序。在不同的 JVM 实现(或不同的版本)上运行相同的代码也可能会改变顺序。根据文档

此类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

所以你不能依赖这里的顺序。如果您需要一个有序的关联映射结构,您需要使用例如TreeMap.


推荐阅读