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

hk8txs48  于 2023-02-20  发布在  Android
关注(0)|答案(8)|浏览(123)

我在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

为什么会这样,知道吗?

azpvetkf

azpvetkf1#

没错,MapHashMap实现并不保证迭代过程中的任何顺序。

如果要基于插入进行排序...

...看一看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

如果要根据密钥排序...

使用NavigableMapSortedMap实现,如TreeMap

kkih6yb8

kkih6yb82#

您需要使用SortedMap而不是HashMap,这样可以保证顺序。

nvbavucw

nvbavucw3#

In HashMap order不存在。请尝试使用LinkedHashMapLinkedHashMap根据插入顺序跟踪键,因此当您调用getKeySet()时,您将获得按您放置键的顺序返回的键。

13z8s7eq

13z8s7eq5#

您还可以使用LinkedHashMap来获取条目集合,这些条目的插入顺序与条目的插入顺序相同。

pengsaosao

pengsaosao6#

查找实现SortedMap接口的类。或者仅出于打印目的,您可以对从Map with Collections返回的de Set进行排序。sort

yizd12fk

yizd12fk7#

如果你使用简单的哈希Map,那么这个类使用一些哈希技术来存储值,在从列表中提取数据时使用相同的哈希技术。哈希函数不是有序的。这就是为什么结果是无序的。在放置哈希Map中,你必须使用LinkedHashMap来使其成为有序列表。

m4pnthwp

m4pnthwp8#

LinkedHashMap<T, T>

保持插入顺序

相关问题