HashMap给出了一个无序的值列表?

时间:2011-10-17 10:37:24

标签: java android

我在Android中遇到了一个奇怪的HashMap问题。我将值放入格式为

的hashmap中
HashMap <String,String> sample = new HashMap<String,String>();

但是,假设我按以下顺序输入以下值:

sample.put("ifi1", "video1");
sample.put("ifi2", "video2");
sample.put("ifi3", "video3");
sample.put("ifi4", "video4");
sample.put("ifi5", "video5");
sample.put("ifi6", "video6");
sample.put("ifi7", "video7");
sample.put("ifi8", "video8");
sample.put("ifi9", "video9");

这只是一个与我的相似的简单例子。我的实际代码中只有一个更大的列表。但是,当我现在尝试仅打印值时,我会得到一个无序列表,如下所示:

VIDEOS: video1
VIDEOS: video3
VIDEOS: video2
VIDEOS: video5
VIDEOS: video4
VIDEOS: video7
VIDEOS: video6
VIDEOS: video9
VIDEOS: video8

实际上我希望它能产生以下列表:

VIDEOS: video1
VIDEOS: video2
VIDEOS: video3
VIDEOS: video4
VIDEOS: video5
VIDEOS: video6
VIDEOS: video7
VIDEOS: video8
VIDEOS: video9

为什么这个,任何想法?

8 个答案:

答案 0 :(得分:23)

没错。 HashMap的{​​{1}}实现不保证迭代期间的任何订单。

如果您想根据插入订购......

...看看LinkedHashMap

Map

如果您想根据钥匙订购......

使用一些SortedMap,例如TreeMap

答案 1 :(得分:4)

您需要使用SortedMap代替HashMap。它将保证订单。

答案 2 :(得分:4)

在HashMap中顺序不存在。请尝试使用LinkedHashMapLinkedHashMap会根据广告订单跟踪密钥,因此当您拨打getKeySet()时,您会按照投放顺序取回密钥。

答案 3 :(得分:3)

使用LinkedHashMap代替

答案 4 :(得分:0)

您还可以使用LinkedHashMap以获取插入顺序的条目集合。

答案 5 :(得分:0)

寻找实现SortedMap接口的类。或者仅出于打印目的,您可以订购从带有Collections.sort的地图返回的de Set

答案 6 :(得分:0)

如果你使用Simple HashMap,那么这个类使用一些散列技术来存储值,在从列表中提取数据时它使用相同的散列技术。并且没有排序哈希函数。这就是结果无序的原因。 在Placed of HashMap中,您必须使用LinkedHashMap使其成为有序List。

答案 7 :(得分:0)

LinkedHashMap<T, T>

保持插入顺序