我有一个包含一个字符串和一个整数的散列图,该字符串是一个文件名,整数是一个与该特定图像相关的值。我需要按照数字顺序对散列图进行排序,以便我有一个从最低编号的文件到最高编号的文件的列表。 我将如何去做这件事?组织一个hashmap
任何帮助,将不胜感激
我有一个包含一个字符串和一个整数的散列图,该字符串是一个文件名,整数是一个与该特定图像相关的值。我需要按照数字顺序对散列图进行排序,以便我有一个从最低编号的文件到最高编号的文件的列表。 我将如何去做这件事?组织一个hashmap
任何帮助,将不胜感激
下面的代码需要像你谈论的hashmap,把它放在自定义值(Entry)的列表中,并按照你想要的排序它们。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String args[]) {
HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
hashmap.put("key1", 38);
hashmap.put("key8", 384);
hashmap.put("key3", 3);
hashmap.put("key5", 8);
hashmap.put("key36", 389);
hashmap.put("key199", 99);
class Entry {
public Entry(String filename, Integer value) {
this.filename = filename;
this.value = value;
}
private String filename;
private Integer value;
public String getFilename() {
return filename;
}
public Integer getValue() {
return value;
}
public String toString() {
return filename + " | " + value;
}
}
List<Entry> list = new ArrayList<Entry>();
for(Map.Entry<String, Integer> entry : hashmap.entrySet()) {
list.add(new Entry(entry.getKey(), entry.getValue()));
}
Comparator<Entry> comparator = new Comparator<Entry>() {
@Override
public int compare(Entry entry0, Entry entry1) {
return entry0.getValue().compareTo(entry1.getValue());
}
};
Collections.sort(list, comparator);
for(Entry entry : list) {
System.out.println(entry);
}
}
}
你真的不需要将这一切全部存储在一个hashmap中,对吗?
与其他人所做的一样,我会建议TreeMap--除非您希望基于整数大小而不是字符串(或值,而不是键)来存储数据。
SO!接下来,您可能需要尝试几种方法:
Oop!有人用入门套装上的比较器殴打我。好吧,我会跳过这个,并继续到
一个linkedHashMap由一个优先级队列支持。这可能很有趣?使用通用HashMap作为支持映射,构建一个将对象放入HashMap的类。诀窍是,每个关键字都是字符串 - 好吧,这不是一个窍门。但价值投入?这是一个窍门。该值将被插入到priorityqueue中。所以你需要同时使用一个HashMap和一个prioQueue,或者某种树。这样,每次尝试重新创建HashMap时都没有nlogn排序成本,而是会产生logn成本。
保留一个哈希映射以按字符串名称查找项目。保留某种具有字符串名称和整数成本的对象的prioQueue。保持两者同步。这在技术上应该与上述2一样有效。
(效率注 - 在这一个成本是棘手,2以上为nlogn,而1以上很可能只是被nlogn以及{你所有的更改,然后订购混账东西,从不再看一遍}或更多{你继续添加/删除它并查询订单,随着地图变大,这将变得非常昂贵}
问题是什么?你试过了什么?所有的工作对我来说“种类的游戏? – 2012-03-19 16:13:32
http://docs.oracle.com/javase/tutorial/collections/interfaces/sorted-map.html – BalusC 2012-03-19 16:13:54
你不能排序哈希图 – Tom 2012-03-19 16:15:35