java HashMap中元素的排列顺序问题

HashMap中元素的排列顺序是不固定的,但下面的代码运行后怎么是固定顺序啊???????
import java.util.*;
import java.io.*;
public class HashMapDemo
{
public static void main(String args[])
{
HashMap hm=new HashMap();
//put(V key,K value) 向Map容器添加一个键值对

hm.put(new Integer(3),"C");
hm.put(new Integer(4),"D");
hm.put(new Integer(5),"E");
hm.put(new Integer(1),"A");
hm.put(new Integer(2),"B");

Set s=hm.keySet(); //获得hm的键的集合
Iterator i=s.iterator();
while(i.hasNext())
{
Object k=i.next();
Object v=hm.get(k); //取得键值所对应的值
System.out.print(" "+k+"="+v);
}
}
}
运行结果: 1=A 2=B 3=C 4=D 5=E

说随机也没错,但是随即也是有一定规则的;
简单地说:他是根据key.hashCode(key你存的键)来确定他的存储位置,这时存在数组里;
如果多个key相等,那么还是存储这个位置;
那这样上个key不是被覆盖了?
当然没有,虽然还是这个位置,但是她存的是一个链;也就是说如果发生”冲突“(key.hashcode相同),数组里存的是一个链(key1》key2》key3);

只能大致说成这样,要是说清楚hashmap的内部实现都够斜坡一篇文章了;
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-03
这是偶然的,你用稍微复杂的数据测一下,肯定是无序的本回答被提问者采纳
第2个回答  2013-12-03
你用list就是固定的噻追问

我意思是问为什么我用HashMap方法结果却是有顺序输出的?

追答

楼上说得没错,你只有去具体看看他的算法才知道他内部是怎么排列的

hashmap是无序的吗?
hashmap是无序的。HashMap 是 Java 中的一种常用数据结构,用于存储键值对。在 Java 8 之前,HashMap 是无序的,也就是说,它不保证元素的存储顺序与插入顺序一致。但是从 Java 8 开始,HashMap 开始提供一种特殊的实现——LinkedHashMap,它可以保持元素的插入顺序。下面将详细解释HashMap的有序性。

如何对HashMap中的元素进行排序
HashMap是无序的集合,对里面的元素进行排序,需要借助其他有序的集合 传统的思路: 把每一个HashMap的键值对作为一个Entry 存入到ArrayList<Entry>里. 然后对ArrayList进行排序.Java8新思路: 利用流对集合进行处理,非常强大, 如果配合上Lambda表达式, 就是简洁且强大.参考代码 import java.util.HashMa...

Java中的HashMap加入元素时,是否可以根据自己定义的顺序加入元素得到自 ...
首先HashMap是无序的,想要有序可以用TreeMap,加入元素后自行排序,但是Map是键值对,它就算排序也是按key排序的,和元素没关系,如果你期望的是元素的排序,建议使用TreeSet,建立TreeSet的时候指定一个comparator.如果确定可以使用TreeSet你可以追问,如果不用,HashMap不能排序这是你要的答案 ...

hashmap是有序的还是无序的
无序的。HashMap在Java中是一种常用的数据结构,实现了Map接口。HashMap中的元素是无序的,遍历HashMap时,元素的顺序与插入的顺序不同。

关于java中HasMap的遍历输出不按顺序
第一种:能顺序遍历就用ArrayList第二种:先把hashMap的key 拿出来 然后把key 排序,通过HashMap的get(String key) 方法取出值 就好了

关于java中HasMap的遍历输出不按顺序
你没理解HashMap的本质,HashMap的存储是使用hash值算位置的,并不是像数组那样放到指定的位置。

如何对HashMap按键值排序
3.从HashMap恢复entry集合,如下所示。[html] view plain copy print?Set<Entry<String,Integer>> mapEntries = aMap.entrySet();4.从上述mapEntries创建LinkedList。我们将排序这个链表来解决顺序问题。我们之所以要使用链表来实现这个目的,是因为在链表中插入元素比数组列表更快。[java] view plain ...

JAVA中的map集合顺序如何与添加顺序一样
你用的是hashmap吧,HashMap是没有顺序的,如果你一定要让它有顺序,可以去实现排序接口,具体是哪个我忘了,不过你可以用TreeMap,这个集合是有序的,和添加顺序一样。

java map元素是否有顺序
map只是一个接口,他的实现类中 HashMap是无序的(只是说不是你插入时的顺序);LinkedHashMap是有序的(按你插入的顺序);TreeMap 是按key排序的;HashMap 类基本上等同于 Hashtable, 区别仅仅在于: HashMap 不是同步的,并且运行 null 值.。

hashmap 是无序的但是实际输出有序。。
hashMap是无序的,这里的无序是指输出的顺序和put进去的顺序不一样,这叫无序。至于输出的顺序总是一个,我觉得这个顺序可能和机器也有关,不同的机器输出的顺序都是不一样的。

相似回答