ArrayList的<散列映射<字符串,字符串>&GT;按字母顺序</hashmap <string,string>

时间:2010-06-11 23:13:46

标签: java

如何通过Hashmap的键来订购HashMaps的ArrayList?我在ArrayList中列出了名称和数字(保存为字符串)。

4 个答案:

答案 0 :(得分:12)

  

我有一个名单和数字列表(保存为字符串)在一个集会内。

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

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

  • 可能需要ArrayList<Pair<String,String>> Pair是一个简单的元组。这将允许您根据元素的插入顺序对列表进行排序。

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

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

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

答案 1 :(得分: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"));
}

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

答案 2 :(得分:4)

使用Collections.sort(List, Comparator)并提供自定义Comparator

Collections.sort(list, new Comparator<Map<String,String>>() {
 @Override
 public int compare(Map<String,String> o1, Map<String,String> o2) {
  return /* your comparison here */;
 }
});

修改:
正如其他编辑指出的那样,你可能会滥用HashMap。我上面的回答实际上就是你问的问题的解决方案,即“如何对地图列表进行排序?”我会把它留在这里繁荣。

我怀疑你理想的解决方案是一个自然顺序的自定义类(实现Comparable)来保存特定人的所有信息,然后将其对象添加到SortedSet,例如{{1} }}

答案 3 :(得分:1)

让我们看看。

这个程序:

import java.util.*;

public class SortMap {
    public static void main( String [] args ) {
        List<Map<String,String>> list = new ArrayList<Map<String,String>>();

        list.add( getMap("Zen", "0"));
        list.add( getMap("April", "0.5"));
        list.add( getMap("Oscar", "1") );
        list.add( getMap("Luca", "2") );

        System.out.println( "Before: "+ list );

        Collections.sort( list, new Comparator<Map<String,String>>(){
             public int compare( Map<String,String> one, Map<String,String> two ) {
                 return one.keySet().iterator().next().compareTo( two.keySet().iterator().next() );
             }
         });

         System.out.println( "After: "+ list );   

    }
    private static Map<String,String> getMap(String key, String value ) {
        Map<String,String> map = new HashMap<String,String>();
        map.put(key,value);
        return map;
    }
}

输出:

$ java SortMap
Before: [{Zen=0}, {April=0.5}, {Oscar=1}, {Luca=2}]
After: [{April=0.5}, {Luca=2}, {Oscar=1}, {Zen=0}]

这就是你在寻找什么?

编辑(如果您正在寻找的话,请阅读)

通过使用正确的作业数据结构,这将是更好实现的方式!

class SortMapBetter {
    public static void main( String [] args ) { 
        Map<String,String> sortedMap = new TreeMap<String,String>();
        sortedMap.put("Zen", "0");
        sortedMap.put("April", "0.5");
        sortedMap.put("Oscar", "1");
        sortedMap.put("Luca", "2");
        System.out.println( sortedMap );
    }
}

$ java SortMapBetter
{April=0.5, Luca=2, Oscar=1, Zen=0}