我在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条答案
按热度按时间azpvetkf1#
没错,
Map
的HashMap
实现并不保证迭代过程中的任何顺序。如果要基于插入进行排序...
...看一看
LinkedHashMap
:如果要根据密钥排序...
使用
NavigableMap
或SortedMap
实现,如TreeMap
。kkih6yb82#
您需要使用
SortedMap
而不是HashMap
,这样可以保证顺序。nvbavucw3#
In HashMap order不存在。请尝试使用LinkedHashMap。
LinkedHashMap
根据插入顺序跟踪键,因此当您调用getKeySet()
时,您将获得按您放置键的顺序返回的键。8fq7wneg4#
请改用
LinkedHashMap
13z8s7eq5#
您还可以使用
LinkedHashMap
来获取条目集合,这些条目的插入顺序与条目的插入顺序相同。pengsaosao6#
查找实现SortedMap接口的类。或者仅出于打印目的,您可以对从Map with Collections返回的de Set进行排序。sort
yizd12fk7#
如果你使用简单的哈希Map,那么这个类使用一些哈希技术来存储值,在从列表中提取数据时使用相同的哈希技术。哈希函数不是有序的。这就是为什么结果是无序的。在放置哈希Map中,你必须使用LinkedHashMap来使其成为有序列表。
m4pnthwp8#
保持插入顺序