【发布时间】:2015-11-17 14:51:11
【问题描述】:
这是我第一次用 Java 订购 HashMap。我需要按键来做到这一点,但在我的情况下,按键是一个对象,所以我需要按特定字段排序。试图自己弄清楚,我考虑继续这个简单的代码:
private HashMap<SimpleDBField, String> sortTable(HashMap<SimpleDBField, String> row){
LinkedHashMap<SimpleDBField, String> orderedRow = new LinkedHashMap<SimpleDBField, String>();
for(int i = 1; i <= row.size(); i ++){
Iterator iterator = row.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<SimpleDBField, String> entry = (Map.Entry<SimpleDBField, String>) iterator.next();
if(entry.getKey().getListPosition()==i){
orderedRow.put(entry.getKey(), entry.getValue());
break;
}
}
}
return orderedRow;
}
假设它可以工作并且我不关心性能,在真正使用它之前,我想知道下一段代码是否会更好,最重要的是:为什么?
以下来源示例:How to sort HashMap by key and value in Java
public static <K extends Comparable,V extends Comparable> Map<K,V> sortByKeys(Map<K,V> map){
List<K> keys = new LinkedList<K>(map.keySet());
Collections.sort(keys);
Map<K,V> sortedMap = new LinkedHashMap<K,V>();
for(K key: keys){
sortedMap.put(key, map.get(key));
}
return sortedMap;
}
如果两者都错了,我该怎么做?
【问题讨论】:
-
你不能那样做;根据定义,HashMap 的键没有定义的顺序。另外,您想要插入顺序还是某种自然顺序(即通过 Comparable)?
-
哈希集合总是无序的,以达到按键访问的最大可能性能。
标签: java sorting hashmap comparable linkedhashmap