如何通过Hashmap的键来订购HashMaps的ArrayList?我在ArrayList中列出了名称和数字(保存为字符串)。
答案 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}