ArrayList <HashMap <String,String >>按字母顺序排列

Luc*_*uca 4 java

如何通过Hashmap的键来订购HashMaps的ArrayList?我在ArrayList中有一个名称和数字列表(保存为字符串).

Ste*_*n C 12

我有一个名单和数字列表(保存为字符串)在一个反对者里面.

我认为这里的真正问题(即为什么你难以描述和实现它)是你使用了错误的数据结构.如果ArrayList中的对象是旨在名单,那么你应该使用HashMaps这样表示它们.HashMaps 不是对的列表,因为它们不保留对的顺序.通过它的声音,您需要保留该顺序,以便为您提供在较大的ArrayList中排序"对列表"数据结构的标准.

如果我的理解是正确的,那么你将难以订购ArrayList ...直到你解决了如何表示内部"列表"的问题.目前尚不清楚该修复应该是什么:

  • 也许它需要ArrayList<Pair<String,String>>在那里Pair是一个简单的元组.这将允许您根据元素的插入顺序对列表进行排序.

  • 也许它需要LinkedHashMap<String,String>.这也允许您根据元素的插入顺序对列表进行排序,同时仍然支持按名称快速查找...如果这很重要.

  • 也许它需要TreeMap<String, String>.这允许您订购密钥(在您的情况下为名称).

  • 也许它需要TreeSet<Pair<String, String>>.这允许您对键(名称)或值或其某些组合进行排序.


小智 7

我认为提问者想知道如何对HashMap(String,String)的ArrayList进行排序,因为Android需要这种结构来将menuItems添加到ListView.

您可以使用:

//Sort the filenames by songTitle
Collections.sort(Arraylist,new Comparator<HashMap<String,String>>(){
    public int compare(HashMap<String,String> mapping1,HashMap<String,String> mapping2){
        return mapping1.get("Name").compareTo(mapping2.get("Name"));
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,HashMaps具有相同的密钥,因此您可以使用我的代码.(您可以将"名称"更改为您的密钥.