Hashmap +插入顺序

Nik*_*shi 1 java

我读到了HashMap,它说没有维护插入顺序.我执行了以下代码,并以相同的顺序返回10,000次响应.

同样在密钥中,我只是将前缀从E更改为M.有人可以帮助解释这种行为吗?

for ( int i = 0; i < 10000; i++ ) {
            Map<String, String> map1 = new HashMap<String, String>();
            map1.put( "E._AUTO", "20");
            map1.put( "E._ITERATIVE", "20");
            map1.put( "E._ANDREW", "20");
            System.out.println(map1);

            Map<String, String> map2 = new HashMap<String, String>();
            map2.put( "M._AUTO", "20");
            map2.put( "M._ITERATIVE", "20");
            map2.put( "M._ANDREW", "20");
            System.out.println(map2);
        }
Run Code Online (Sandbox Code Playgroud)

输出:

{E._ANDREW=20, E._ITERATIVE=20, E._AUTO=20}
{M._ITERATIVE=20, M._AUTO=20, M._ANDREW=20}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

我执行了下面的代码并且10,000次响应以相同的顺序返回.

这就是您正在使用的版本和您要插入的值所发生的情况.如果您添加不同的值,或者如果您删除项目然后添加其他项目,则无法保证它将继续发生,或者保持插入订单.

基本上,这是不是说,这绝对不会是在一个特定的顺序-它说,你绝对应该依赖于它的顺序是.

另请注意,如果您希望维护插入顺序,那么您的示例已经证明它不是.输出显示未按插入顺序显示的项目.

LinkedHashMap将通过在内部维护哈希映射旁边的条目链接列表来维护插入顺序.(这里的一个例外是有一个构造函数,它允许您指定项目将以访问顺序而不是插入顺序呈现,这通常在您希望将其作为缓存的基础时使用.)