程式實現對資料排序並按出現次數進行排序 目錄 1. 題目程式實現對資料排序並按出現次數進行排序 1 2. 思路 2 3. 效果 2 4. 程式碼 /00listPrj/src/Sort.java 2
程式實現對資料排序並按出現次數進行排序
目錄
4. 程式碼 /00listPrj/src/Sort.java 2
程式實現對資料排序並按出現次數進行排序(注:用面向物件的方式實現,用for迴圈進行排序,別用comparable介面實現){1,4,2,1,3,2,1,4}作為引數(引數可變)傳入java方法中,控制檯輸出以下結果
1出現了3次
2出現了2次
4出現了2次
3出現了1次
資料排序
Groupby分組聚合操作(數字,次數)
倒排序操作(按照次數)
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alibaba.fastjson.JSON;
@SuppressWarnings("all")
public class Sort {
public static void main(String[] args
// 定義一個長度為10的陣列;
int[] array = new int[] { 1, 4, 2, 1, 3, 2, 1, 4 };
// 陣列的長度
int length = array.length;
sortArray(array, length);
System.out.println("\n氣泡排序後的陣列元素順序:");
for (int m = 0; m <= length - 1; m++) {
System.out.print(array[m] + "\t");
}
System.out.print("\r\n");
//執行groupby 聚合操作,獲取元素和出現次數
List<Map> rzt = getKeyAndCount_groupbyKey(array);
System.out.println( JSON.toJSONString(rzt, true));
//執行排序 ,按照出現次數
List<Map> rzt_final = orderByCountDesc(rzt);
System.out.println( JSON.toJSONString(rzt_final, true));
//輸出結果
for (Map map : rzt_final) {
try {
System.out.println(map.get("num")+"出現了"+map.get("count")+"次");
} catch (Exception e) {
// TODO: handle exception
}
}
}
private static List<Map> getKeyAndCount_groupbyKey(int[] array ) {
//分組運算,得到四個組
Set<Integer> intElementKeySet = getKeySet(array, array.length);
List<Map> rzt = new ArrayList<>();
for (Integer k : intElementKeySet) {
Map m = new LinkedHashMap<>();
m.put("num", k);
//做了count聚合運算
m.put("count", count(k, array));
rzt.add(m);
// System.out.println(k+"出現了"+getcount(k,array)+"次");
}
return rzt;
}
private static Set<Integer> getKeySet(int[] array, int length) {
Set<Integer> st = new LinkedHashSet<>();
for (int m = 0; m <= length - 1; m++) {
st.add(array[m]);
}
return st;
}
private static void sortArray(int[] array, int length) {
// 數值中轉變數
int num = 0;
// 將陣列進行9次比較
for (int n = 0; n <= length - 2; n++) {
// 將陣列內元素進行9次的兩兩比較
for (int i = 0; i <= length - 2; i++) {
if (array[i] > array[i + 1]) {
// 比較大小後,進行位置互換
num = array[i + 1];
array[i + 1] = array[i];
array[i] = num;
}
}
}
}
//根據count欄位倒排列表
private static List<Map> orderByCountDesc(List<Map> rzt) {
List<Map> rzt_final = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Map max = getMax(rzt);
rzt_final.add(max);
rzt.remove(max);
}
return rzt_final;
}
private static Map getMax(List<Map> rzt) {
int maxcnt = 0;
Map maxMap = null;
for (Map map : rzt) {
Integer cnt = (Integer) map.get("count");
if (cnt > maxcnt) {
maxMap = map;
maxcnt = cnt;
}
}
return maxMap;
}
//計算某一元素出現次數
private static Integer count(Integer k, int[] array) {
int cnt = 0;
for (int i : array) {
if (k == i)
cnt++;
}
return cnt;
}
}