HashMap 是无序的 为什么用Iterator 迭代出来时每次的顺序都一样

如题所述

这里的无序,不是随机的概念。无序是说里面的元素并不是按照某一种特定规则排列的。但是你终归还要有一个顺序的。
举个例子,你每天去吃饭要排队,假设就10个人,这10个人就是无序的,每天来的顺序是不固定的,但是一旦排好后,你迭代一次就是读取一遍这个排好的对,每次肯定都是一样的呀,只要这10个人不变,顺序就是一样的。一旦有人走,再有人来,顺序就不一定是什么了。追问

1、
map.put("3", "");
map.put("4", "");
map.put("1", "");
map.put("2", "");
2、
map.put("4", "");
map.put("3", "");
map.put("2", "");
map.put("1", "");

1和2改变了 put的顺序但是输出的顺序都是
4
2
1
3
感觉你理解的不对吧

追答

计算机不是大自然,他的hash是按照一定算法来实现的,不是像你说的就大家都是以大堆,就是无序的。他必须有一个顺序,不然你怎么迭代输出,只是这个顺序是按照一定算法生成的,不是按照关键字的大小生成的。最简单的算法就是取模运算,比如都%2,这样所有偶数对于他来说是一样的,所有奇数对他来说也是一样的。根据模的不同,出来的顺序就不一样了。你这个测试什么也说明不了。只能说明,1,2,3,4他们没有冲突。

追问

我知道是有顺序,就是想确定这个顺序是根据什么生成的,要有原理,有根据,才能去说服别人

追答

那你就应该去查hashmap的hash算法。一般简单的就是取模。
但是java什么的肯定是比较复杂的算法。但是基本原理是取模。
你不查原理,我就不知道你来问什么了。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答