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

byt*_*uit 6 java android

我在Android中遇到了一个奇怪的HashMap问题.我正在将值放入形式的hashmap中

HashMap <String,String> sample = new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)

但是,假设我按以下顺序放置以下值:

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");
Run Code Online (Sandbox Code Playgroud)

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

VIDEOS: video1
VIDEOS: video3
VIDEOS: video2
VIDEOS: video5
VIDEOS: video4
VIDEOS: video7
VIDEOS: video6
VIDEOS: video9
VIDEOS: video8
Run Code Online (Sandbox Code Playgroud)

事实上,我希望它产生以下列表:

VIDEOS: video1
VIDEOS: video2
VIDEOS: video3
VIDEOS: video4
VIDEOS: video5
VIDEOS: video6
VIDEOS: video7
VIDEOS: video8
VIDEOS: video9
Run Code Online (Sandbox Code Playgroud)

为什么这个,任何想法?

aio*_*obe 23

那就对了.迭代期间的HashMap实现Map不保证任何顺序.

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

......看看LinkedHashMap:

Map<String, String> sample = new LinkedHashMap<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");

for (String video : sample.values())
    System.out.println(video);

// Prints
video1
video2
video3
video4
video5
video6
video7
video8
video9
Run Code Online (Sandbox Code Playgroud)

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

使用一些SortedMapTreeMap.


Sas*_*ein 5

您需要使用SortedMap而不是HashMap. 它将保证秩序。