Topic: 关于HashMap的“关键字-值”对的显示顺序

  Print this page

1.关于HashMap的“关键字-值”对的显示顺序 Copy to clipboard
Posted by: snowbird2005
Posted on: 2005-06-12 22:46

请看以下小程序:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapDemo
{

public static void main(String[] args)
{
Map map = new HashMap();
map.put("1","value1");
map.put("2","value2");
map.put("3","value3");
map.put("4","value4");

System.out.println(map.get("1"));

Set keySet = map.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext()Wink
{
System.out.println(iterator.next());
}

Collection values=map.values();
for (Iterator iterator = values.iterator(); iterator.hasNext()Wink
{
System.out.println(iterator.next());
}
Set entrySet=map.entrySet();
for (Iterator iterator = entrySet.iterator(); iterator.hasNext()Wink
{
System.out.println(iterator.next());
}

}

}

以上程序执行结果如下:
value1
3
2
4
1
value3
value2
value4
value1
3=value3
2=value2
4=value4
1=value1
我想问的是:为什么不管是关键字、值还是关键字--值对的映射关系,
他们的显示顺序都是3,2,4,1。每次执行都一样,应该也不是随机显示的。
为什么不是象我定义的顺序1,2,3,4 呢?

2.Re:关于HashMap的“关键字-值”对的显示顺序 [Re: snowbird2005] Copy to clipboard
Posted by: Jove
Posted on: 2005-06-12 23:06

因为"1" "2" "3" "4"的散列值不一定是顺序的

3.Re:关于HashMap的“关键字-值”对的显示顺序 [Re: Jove] Copy to clipboard
Posted by: snowbird2005
Posted on: 2005-06-12 23:35

谢谢!
散列值不同,那么迭代时是按照散列值由大到小还是由小到大的顺序显示呢?
另外,每次显示的顺序都一样,就是说每次使用了相同的哈希函数?
能不能得到它的哈希函数?

4.Re:关于HashMap的“关键字-值”对的显示顺序 [Re: snowbird2005] Copy to clipboard
Posted by: bluepure
Posted on: 2005-06-13 00:16

用java.util.TreeMap 。

5.Re:关于HashMap的“关键字-值”对的显示顺序 [Re: bluepure] Copy to clipboard
Posted by: snowbird2005
Posted on: 2005-06-13 00:53

谢谢!
但是我仍然想知道以下问题,你知道吗?
(散列值不同,那么迭代时是按照散列值由大到小还是由小到大的顺序显示呢?
另外,每次显示的顺序都一样,就是说每次使用了相同的哈希函数?
能不能得到它的哈希函数?)

6.Re:关于HashMap的“关键字-值”对的显示顺序 [Re: snowbird2005] Copy to clipboard
Posted by: zerol
Posted on: 2005-06-13 02:14

跟踪一下 HashMap 及其内部类 HashIterator 好了。

(缩略图,点击图片链接看原图)


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923