Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort HashMap as added in Android with ArrayAdapter

I have a HashMap<String,String> and there is a static method which returns this map to an Activity.

Method looks like this:

public static HashMap<String, String> getAll() {    
    HashMap<String, String> map = new HashMap<String,String>();

    map.put("ab", "value1");
    map.put("bc", "value2");
    map.put("de", "value3");

    return map;
}

I want to use that map with a spinner. So activity looks like this:

List list = new ArrayList<String>();
HashMap<String, String> map = Constants.getAll();

for (String key : map.keySet()) {
    list.add(Constants.getAll().get(key).toString());
}

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinTest = (Spinner)findViewById(R.id.spinTest);

spinTest.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        urlDebug.setText(list.get(arg2).toString());
    }

    public void onNothingSelected(AdapterView<?> arg0) {

    }
});

spinTest.setAdapter(adapter);

When I tried to run my application, no problem at all. But when I clicked on spinner, items not ordered as I added on getAll() method. I mean, order has to be ab - bc -de but it's ordered randomly.

What's not true?

like image 503
Ogulcan Orhan Avatar asked Jan 30 '12 09:01

Ogulcan Orhan


People also ask

Can HashMaps be sorted?

There are two ways to sort HashMap by keys, first by using TreeMap and second by using LinkedHashMap. If you want to sort using TreeMap then it's simple, just create a TreeMap by copying the content of HashMap.

Can we sort HashMap using collections sort?

Sort HashMap by Values using Comparator Interface After that get the Set of elements from the Map and convert Set into the List. Use the Collections. sort(List) method to sort the list of elements by values by passing customized comparator. Now create a new LinkedHashMap and copy the sorted elements into that.


2 Answers

in hashmap, insertion order is not maintained, so item inserted last may accessed first. If you want to maintain order of insertion, use linkedhashmap instead.

like image 161
jeet Avatar answered Nov 15 '22 01:11

jeet


Update : Answer by jitendra sharma is the best : A treemap costs a lot more than a linkedhashmap and adds nothing to your project if you only need to keep original insertion order.

Hashmap cannot get sorted. That's part of their efficiency.

If you need sorting, then use a TreeMap.

Good luck.

like image 34
Yahel Avatar answered Nov 15 '22 00:11

Yahel