面试小题
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] + "次"); } } } }
以上是关于面试小题的主要内容,如果未能解决你的问题,请参考以下文章