面试掉了,记录学习总结

第一篇Blog,记录下今天失败的面试

京华信息–java开发,机试没通过,直接回家了…
大四学生,自己平时也动手练的挺多的,可能是涉及过于简单了吧
就当是算积累一些题目经验了吧,

机试题如下:

    List<String> list = Arrays.asList(new String[]{"1,张三,50","2,李四,80","3,王五,40","4,	  张三,90","5,王五,70"});  
    输出所有同学的名字及其平均分
    按平均分升序
    运行如下:
    王五:55
	张三:70
	李四:80

回来一直被折磨,后来上社区,参考了以下两篇文章:
https://blog.csdn.net/weixin_44098851/article/details/103378449
https://blog.csdn.net/Azadoo/article/details/106971897

感觉自己真的是太菜了,看题觉得自己行了,可是怎么写都不对,2333…真的难受

话不多说,直接上代码:

public static void main(String[] args) {
        List<String> list = Arrays.asList(new String[]{"1,张三,50","2,李四,80","3,王五,40","4,张三,90","5,王五,70"});
        /*
        * 输出所有同学的名字及其平均分
        * 按平均分升序
        * */
        //map1用来存放 姓名,总分数
        HashMap<String, Integer> map1 = new HashMap<>();
        //map2用来存放 姓名,科目数
        HashMap<String, Integer> map2 = new HashMap<>();
        //key
        String k=null;
        //value
        Integer v = null;

        for (String s : list) {
            //原文章在这里用subString()方法,不推荐,假如集合里有3个字及以上的姓名,这个方法就行不通了
            //每个人都是按{序号,姓名,分数}的格式,用split()拆分成String数组直接按下标取比较合理
            String[] strings=s.split(",");
            k = strings[1];
            v = Integer.parseInt(strings[2]);
            //基本逻辑判断,不存在正常put,存在则计算后put
            if (map1.get(k) == null) {
                map1.put(k, v);
                map2.put(k, 1);
            } else {
                map1.put(k, map1.get(k) + v);
                map2.put(k, map2.get(k) + 1);
            }
        }
        //计算每个人的平均分,并重新put到集合中进行覆盖,最终得到我们想要操作的数据
        for (Map.Entry<String, Integer> entry : map1.entrySet()) {
            String name = entry.getKey();
            Integer score = entry.getValue()/map2.get(name);
            map1.put(name, score);
        }
        /*
        排序:这里用到Collections和Comparator的知识,我之前没了解和使用过comparable和Comparator,
        加上对Collections工具类不是很熟练,所以没想到用这种方式去排序
        */
        //1.拿到map1的键值对集合
        Set<Map.Entry<String, Integer>> entrySet = map1.entrySet();
        //2.将set集合转为List集合,为了使用Collections工具类的排序方法
        List<Map.Entry<String, Integer>> entryList = new ArrayList<>(entrySet);
        Collections.sort(entryList, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                //3.按要求根据集合的value排序,降序的话反过来写就行
                return o1.getValue() - o2.getValue();
            }
        });
        //4.创建一个新的有序的HashMap集合
        LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
        //5.将entryList中的数据存储在linkedHashMap中
        for (Map.Entry<String, Integer> entry : entryList) {
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        linkedHashMap.forEach((K,V)-> System.out.println(K+":"+V));
    }

好好总结,希望自己能找到工作!

上一篇:element tree 默认勾选已知id


下一篇:双散列表实现随机概率返回