ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试掉了,记录学习总结

2021-04-12 21:33:53  阅读:233  来源: 互联网

标签:总结 String 记录 map2 面试 map1 entry put new


第一篇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));
    }

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

标签:总结,String,记录,map2,面试,map1,entry,put,new
来源: https://blog.csdn.net/m0_52364203/article/details/115641889

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有