开发者

HashMap gives an unordered list of values?

开发者 https://www.devze.com 2023-04-13 07:22 出处:网络
I\'m having a weird problem with HashMap in Android. I\'m putting values into the hashmap which is of the form

I'm having a weird problem with HashMap in Android. I'm putting values into the hashmap which is of the form

HashMap <String,String> sample = new HashMap<String,String>();
开发者_如何学编程

However let's say I'm putting the following values in the following order:

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");

This is just a simple example that is similar to what i have. I only have a bigger list in my actual code. However when I now try to print only the values, I get an unordered list as follows:

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

where in fact I'm expecting it to produces the following list:

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

Why is this, any idea?


That's right. The HashMap implementation of Map does not guarantee any order during iteration.

If you want ordering based on insertion...

...have a look at 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

If you want ordering based on the keys...

Use a NavigableMap or SortedMap implementation such as a TreeMap.


You need to use SortedMap instead of HashMap. It will guarantee order.


In HashMap order is not there. Try using LinkedHashMap instead. LinkedHashMap keeps track of the keys based on insertion order, so that when you do a call to getKeySet(), you will get the keys back in the order you put them in.


Use LinkedHashMap instead


You can also use a LinkedHashMap in order to obtain the collection of entries in the same order they were inserted in.


look for a class that implements SortedMap interface. Or for print purposes only, you can order de Set returned from your Map with Collections.sort


If you use Simple HashMap then this class use some hashing technique to store the value ,at the time of extracting the data from list its use same hash technique. And Hash function are not ordered. that's why result is coming unordered. In Placed of HashMap you have to use LinkedHashMap to make it ordered List.


LinkedHashMap<T, T>

keep the insert order

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号