javaバージョン:携帯番号の中で数字を繰り返して出現する回数を多から少まで並べて印刷します。

2809 ワード

参考資料:
http://www.cnblogs.com/liu-qing/p/3983496.html
http://lhkzyz.iteye.com/blog/1666193
http://blog.csdn.net/fygkchina/article/details/8764501
表示: https://hui.lu/a-python-interview/ ブログの面接テーマ「携帯番号に数字が重複して出てくる回数は多くから少なめに並べてプリントアウトする」
本論文で著者らはpythonの実現を与えた。
皆さんの文章を参考にして、javaの実現をまとめてメモしてみました。
考え方:によってhttp://www.cnblogs.com/liu-qing/p/3983496.htmlに記載されています。「まず、mapのkey-valueをリストに入れて、その後、Collection s.sortでリストを並べて、並べ替えられたlistをLinked HashMapに入れて、最後にLinked HashMapに戻ればいいです。」
import java.util.*;

/**
 * Created by dell on 2016/8/26.
 */
public class Test003 {
    public static void main(String[] args) {
        String phoneNum = "18655448827";
        Map numMap = new HashMap();
        char[] ch = phoneNum.toCharArray();

        for (char c : ch) {
            if (numMap.get(c) == null) {
                numMap.put(c, 1);
            } else {
                int num = numMap.get(c);
                num++;
                numMap.put(c, num);
            }
        }

        numMap = sortByValue2(numMap);
        //  key   
        Set set = numMap.keySet();

        for (Character c : set) {
            System.out.println("["+c+"]"+":     "+numMap.get(c));
        }


    }

    public static Map sortByValue(Map map) {
        List list = new LinkedList(map.entrySet());
        Collections.sort(list, new Comparator() {
            //                
            public int compare(Object o1, Object o2) {
                return ((Comparable) ((Map.Entry) (o2)).getValue()).compareTo(((Map.Entry) (o1)).getValue());
            }
        });
        Map result = new LinkedHashMap();
        for (Iterator it = list.iterator(); it.hasNext(); ) {
            Map.Entry entry = (Map.Entry) it.next();
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }


    /**
     * java 7 version
     * @param map
     * @param 
     * @param 
     * @return
     */
    public static > Map sortByValue2(Map map) {
        List> list = new LinkedList<>(map.entrySet());
        Collections.sort(list, new Comparator>() {
            @Override
            public int compare(Map.Entry o1, Map.Entry o2) {
                return (o2.getValue()).compareTo(o1.getValue());
            }
        });

        Map result = new LinkedHashMap<>();
        for (Map.Entry entry : list) {
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }
}