java筆試題(六)
阿新 • • 發佈:2022-04-04
import java.util.*; import java.util.stream.Stream; public class Javatest89 { /** * 集合-Map(HashMap)、Collections工具類 * 練習3:統計一個字串中每個字元出現的次數,儲存到HashMap集合中, * 通過排序,列印輸出次數最多的前三個字元及次數 * * 執行結果: * 請輸入一個字串: * abbcccdddd * **********方法一*********** * d=4 * c=3 * b=2 * **********方法二*********** * a=1 * b=2 * c=3 * d=4 * **********方法三*********** * d=4 * c=3 * b=2 * **********方法四*********** * b出現次數:2 * c出現次數:3 * d出現次數:4*/ public static void main(String[] args) { System.out.println("請輸入一個字串:"); Scanner sc = new Scanner(System.in); String s = sc.nextLine(); HashMap<Character,Integer> map = new HashMap<>(); //1、遍歷字串,統計每個字元出現的次數,並儲存至map集合 for (int i = 0; i < s.length(); i++) {char c = s.charAt(i); if(map.containsKey(c)){ map.put(c,map.get(c)+1); } else{ map.put(c,1); } } //2、根據出現次數多少進行排序 //第一種方法,List的sort方法 //2.1 轉換成List List<Map.Entry<Character,Integer>> entry = newArrayList<>(map.entrySet()); //2.2 根據value進行排序 entry.sort(Map.Entry.comparingByValue()); System.out.println("**********方法一***********"); for (int i = entry.size() -1 ; i > entry.size() -4; i--) { System.out.println(entry.get(i)); } //第二種方法,sorted方法 Stream<Map.Entry<Character,Integer>> sorted = map.entrySet().stream().sorted(Map.Entry.comparingByValue()); System.out.println("**********方法二***********"); sorted.forEach(System.out::println); //第三種方法,Comparator的sort方法 List<Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() { @Override public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); } }); System.out.println("**********方法三***********"); for (int i = list.size() -1; i > list.size() -4 ; i--) { System.out.println(list.get(i)); } //第四種方法,自定義方法 List<Integer> list1 = new ArrayList<>(); for (Integer value:map.values()) { list1.add(value); } System.out.println("**********方法四***********"); list1.sort(Integer::compareTo); for (Map.Entry<Character,Integer> entry1:map.entrySet()) { if(entry1.getValue() == list1.get(list1.size() -1) || entry1.getValue() == list1.get(list1.size() -2) || entry1.getValue() == list1.get(list1.size() -3)){ System.out.println(entry1.getKey() + "出現次數:" + entry1.getValue()); } } } }