关于集合的。。。。

栩鑫苑 2016-06-01 07:24:25



Map<String,String> map=new HashMap<String,String>();
map.put(String.valueOf(System.currentTimeMillis())+"a", "1");
map.put(String.valueOf(System.currentTimeMillis())+"b", "2");
map.put(String.valueOf(System.currentTimeMillis())+"c", "3");
for(Map.Entry<String, String> entry:map.entrySet()){
System.out.println(entry.getValue());
}




输出的顺序为什么是不确定的?
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱睡觉的阿狸 2016-06-02
  • 打赏
  • 举报
回复
HashMap是一种数组加链表的数据存储结构,根据你输入的key,来确定你存储在哪里,参看源码,也就是这两个方法int hash = hash(key); int i = indexFor(hash, table.length);这个i也就是数组的下标,当两个key得到的i一样时,会在那个相对应的数组元素上采用链表形式存储。 所以,HashMap元素的排序跟key的值有关,跟插入先后关系不是很大。
菜 头 2016-06-02
  • 打赏
  • 举报
回复
hashmap本来就是无序的,你要排序用treemap
gamedev˚ 2016-06-02
  • 打赏
  • 举报
回复
来点专业的回答,首先楼主需要了解HashMap和TreeMap的区别 Java类库中为映射提供了两个通用的实现:HashMap和TreeMap。这两个类都实现了Map接口。 散列映射表HashMap直接对键进行散列,树键映射表TreeMap用键的整体顺序对元素进行排序,并将其组织成搜索树。 在补充一点:那应该选择散列映射表还是树映射表呢?答案是:散列稍微快一些,如果不需要按照排列顺序访问键,就最好选择散列。 这下楼主应该明白为什么输出的不是按顺序了吧,楼主可以试一下,将HashMap改为TreeMap,输出就是按顺序啦~~
键圣 2016-06-01
  • 打赏
  • 举报
回复
HashMap内部存储不是有序的,所以遍历的时候和你插入的顺序是无关的。可以看java.util.HashMap.putVal(int, K, V, boolean, boolean)和java.util.HashMap.HashIterator.nextNode()
securitit 2016-06-01
  • 打赏
  • 举报
回复
HashMap内部实现是一个数组,K/V对在数组中存储的位置是通过K的hash决定的,所以每次存储的位置不一样,因为System.currentTimeMillis()是在时刻变化的。
鬼狐柒 2016-06-01
  • 打赏
  • 举报
回复
只因为你使用的是HashMap,LinkedHashMap和TreeMap等可以保证顺序,但是应该会损失一些效率。还有就是Map本来就是key对value,要顺序意义也不是很大

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧