如何在不更改android中的值的情况下按字母顺序对哈希映射键进行排序?

时间:2017-05-10 05:54:14

标签: java android hashmap

我有一个哈希地图列表,其中包含联系人姓名作为密钥,电话号码包含值,如下所示。

   cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

    while (cursor.moveToNext()) {

        name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

        phonenumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        //stored_Contacts.add(name);
       // phone_number_list.add(phonenumber);


        try {
            hash_map_list = new ArrayList<HashMap<String, String>>();
            map = new HashMap<String, String>();
            map.put(name, phonenumber);
            hash_map_list.add(map);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
    cursor.close();

我需要的是,我想按字母顺序对联系人姓名进行排序,并保留值(电话号码)和联系人姓名。任何人都可以帮忙吗?

我尝试过这个功能,但没有工作。

 private static Map<String, String> sortByComparator(Map<String, String> unsortMap, final boolean order)
{

    List<Map.Entry<String, String>> list = new LinkedList<Map.Entry<String, String>>(unsortMap.entrySet());

    // Sorting the list based on values
    Collections.sort(list, new Comparator<Map.Entry<String, String>>()
    {
        public int compare(Map.Entry<String, String> o1,
                           Map.Entry<String, String> o2)
        {
            if (order)
            {
                return o1.getValue().compareTo(o2.getValue());
            }
            else
            {
                return o2.getValue().compareTo(o1.getValue());

            }
        }
    });

    Map<String, String> sortedMap = new LinkedHashMap<String, String>();
    for (Map.Entry<String, String> entry : list)
    {
        sortedMap.put(entry.getKey(), entry.getValue());
    }

    return sortedMap;
}

1 个答案:

答案 0 :(得分:2)

HashMap并非设计为已排序的数据集。牺牲了这一点,以便在存储和检索值时尽可能高效。

另一方面,TreeMap的设计方式使您的密钥始终排序。这看起来是适合您用例的工具。