面试小题

Posted yuanziren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试小题相关的知识,希望对你有一定的参考价值。

1.已知一个 HashMap<Integer, User>集合, User 有 name(String)和 age(int)属性。请写一个方法实现对HashMap 的排序功能,该方法接收 HashMap<Integer, User>为形参,返回类型为 HashMap<Integer, User>,要求对 HashMap 中的 User 的 age 倒序进行排序。排序时 key=value 键值对不得拆散。

public class HashMapTest {

    public static void main(String[] args) {
        
        HashMap<Integer, User> map = new HashMap<>();
        map.put(1, new User("张三",22));
        map.put(2, new User("李四",28));
        map.put(3, new User("王五",26));
        
        System.out.println(map);
        
        Set<Entry<Integer, User>> entrySet = map.entrySet();
        System.out.println(entrySet);
        for (Entry<Integer, User> entry : entrySet) {
            System.out.println(entry.getKey()+"----"+entry.getValue());
        }
        
        List<Entry<Integer, User>> list = new ArrayList<>(entrySet);
        System.out.println(list);
        Collections.sort(list,new Comparator<Entry<Integer, User>>() {
            @Override
            public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {

                return o2.getValue().getAge() - o1.getValue().getAge();
            }
        });
        LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<>();
        for (Entry<Integer, User> entry : list) {
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        System.out.println(linkedHashMap);
    
    }
}

2.用面向对象的方法求出数组中重复 value 的个数,按如下个数输出: 

1出现:1次
3出现:2次
8出现:3次
2出现:4次

arr = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5};

public class Test01 {

    public static void main(String[] args) {
        int[] arr = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5};
        System.out.println("arr.length:" + arr.length);
        test02(arr);
        
        
    }

    private static void test02(int[] arr) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 0; i < arr.length; i++) {
            if (!map.containsKey(arr[i])) {
                map.put(arr[i], arr[i]);
            }
        }
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            Integer key = entry.getKey();
            int num = 0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == key) {
                    num++;
                }
            }
            map.put(key, num);
        }
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + "出现:" + entry.getValue() + "次");
        }
    }

    private static void test01(int[] arr) {
        int[] arrNum = new int[126];    // 创建一个新数组
        
        for (int i = 0; i < arr.length; i++) {
            arrNum[arr[i]]++;    // 用来记录某元素出现的次数
        }
        
        for (int i = 0; i < arrNum.length; i++) {
            if (arrNum[i] != 0) {
                System.out.println(i + "出现:" + arrNum[i] + "次");
            }
        }
    }
}

 

以上是关于面试小题的主要内容,如果未能解决你的问题,请参考以下文章

Linux 的面试小题 9

storm面试小题

Linux 的面试小题 8

面试常用的代码片段

面向面试编程代码片段之GC

前端面试题之手写promise