下面是您開始使用一種方法可以基於保持的初始陣列中的每個整數多少次已經出現在地圖中的計數的想法。一旦所有的數字都被計算在內,通過遞增值的順序排序的地圖,然後打印地圖的輸出:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.TreeMap;
public class SortCount {
public static void main(String[] args) {
int nums[] = {0,0,0,1,3,3,2,1,3,5,6,0};
HashMap<Integer,Integer> counts = new HashMap<Integer,Integer>();
for(int i = 0; i < nums.length; i++) {
if(counts.containsKey(nums[
Integer c = counts.get(nums[i]) + 1;
counts.put(nums[i], c);
}
else {
counts.put(nums[i],1);
}
}
ValueComparator<Integer,Integer> bvc = new ValueComparator<Integer,Integer>(counts);
TreeMap<Integer,Integer> sortedMap = new TreeMap<Integer,Integer>(bvc);
sortedMap.putAll(counts);
ArrayList<Integer> output = new ArrayList<Integer>();
for(Integer i : sortedMap.keySet()) {
for(int c = 0; c < sortedMap.get(i); c++) {
output.add(i);
}
}
System.out.println(output.toString());
}
}
它採用了Comparator
類的Map
的值進行比較:
import java.util.Comparator;
import java.util.Map;
public class ValueComparator<T1,T2 extends Comparable<T2>> implements Comparator<T1> {
Map<T1,T2> base;
public ValueComparator(Map<T1,T2> base) {
this.base = base;
}
@Override
public int compare(T1 k1, T1 k2) {
T2 val1 = base.get(k1);
T2 val2 = base.get(k2);
return val1.compareTo(val2);
}
}
來源
2012-08-07 10:29:14
Edd
你想要什麼結果呢? '{0,0,0,0,1,1,2,3,3,3,5,6}'? – 2012-08-07 09:30:20
要建立在以前的評論:你想排序陣列? – Baz 2012-08-07 09:32:06
「基於計數」是什麼意思?如果奇數長度上升,如果長度或類似的東西下降? – billdoor 2012-08-07 09:36:36