我读到了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将通过在内部维护哈希映射旁边的条目链接列表来维护插入顺序.(这里的一个例外是有一个构造函数,它允许您指定项目将以访问顺序而不是插入顺序呈现,这通常在您希望将其作为缓存的基础时使用.)
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |