我试图找出我怎么可能从一开始的前10个值HashMap
。 我最初试图使用TreeMap
和值有它的排序,然后但它似乎不是选项采取的第一个10个值,如TreeMap
的键排序。
我想还是能够知道哪些键具有最高值,则K, V
地图是String, Integer
。
我试图找出我怎么可能从一开始的前10个值HashMap
。 我最初试图使用TreeMap
和值有它的排序,然后但它似乎不是选项采取的第一个10个值,如TreeMap
的键排序。
我想还是能够知道哪些键具有最高值,则K, V
地图是String, Integer
。
也许你应该实现Comparable
接口存储在HashMap中的值对象。 然后你就可以创建所有值的数组列表:
List<YourValueType> l = new ArrayList<YourValueType>(hashmap.values());
Collection.sort(l);
l = l.subList(0,10);
问候
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Testing {
public static void main(String[] args) {
HashMap<String,Double> map = new HashMap<String,Double>();
ValueComparator bvc = new ValueComparator(map);
TreeMap<String,Double> sorted_map = new TreeMap<String,Double>(bvc);
map.put("A",99.5);
map.put("B",67.4);
map.put("C",67.4);
map.put("D",67.3);
System.out.println("unsorted map: "+map);
sorted_map.putAll(map);
System.out.println("results: "+sorted_map);
}
}
class ValueComparator implements Comparator<String> {
Map<String, Double> base;
public ValueComparator(Map<String, Double> base) {
this.base = base;
}
// Note: this comparator imposes orderings that are inconsistent with equals.
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}
}
恐怕你必须遍历整个地图。 堆是用于查找顶部K中的元素,如在解释通常使用的数据结构这本书 。
如果您想获得地图的10个最高值(假设值是数字或至少可比实现),那么试试这个:
List list = new ArrayList(hashMap.values());
Collections.sort(list);
for(int i=0; i<10; i++) {
// Deal with your value
}
让我们假设你有一个地图,但这个例子可以用于任何类型的工作
Map<String, String> m = yourMethodToGetYourMap();
List<String> c = new ArrayList<String>(m.values());
Collections.sort(c);
for(int i=0 ; i< 10; ++i) {
System.out.println(i + " rank is " + c.get(i));
}
我基地我的答案在这一个从sk2212
首先,你需要实现一个下降比较:
class EntryComparator implements Comparator<Entry<String,Integer>> {
/**
* Implements descending order.
*/
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
if (o1.getValue() < o2.getValue()) {
return 1;
} else if (o1.getValue() > o2.getValue()) {
return -1;
}
return 0;
}
}
然后,你可以在方法中使用它,如这一个属性“的HashMap”:
public List<Entry<String,Integer>> getTopKeysWithOccurences(int top) {
List<Entry<String,Integer>> results = new ArrayList<>(hashmap.entrySet());
Collections.sort(results, new EntryComparator());
return results.subList(0, top);
}