Java学习day16---人际关系

1.人际关系文件 好友.txt

A:B,C,D,F,E,O,j
B:A,C,E,K
C:F,A,D,I
D:A,E,F,L
E:B,C,D,M,L
F:A,B,C,D,E,O,M
G:A,C,D,E,F
H:A,C,D,E,O
I:A,O
J:B,O
K:A,C,D
L:D,E,F
M:E,F,G
O:A,H,I,J
X:A

2.获取人员最好的用户

/**
 * 1.1  获取所有用户的对应的好友数量 取人员最好的用户
 * @author hasee
 *
 */
public class Test1 {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        //1 读取文件
        BufferedReader reader = new BufferedReader(new FileReader("d:/data/好友.txt"));
        //定义map 存储结果数据
        Map<String,Integer> result = new HashMap();
        //定义一个字符串 接收每行数据
        String str ;
        while((str = reader.readLine())!=null) {
            //3 对每行数据进行切割
            //3.1 按照冒号切割   spliy[0]用户名  split[1] 好友列表
            String[] split = str.split(":");
            //3.2切分好友列表数据
            String[] fs = split[1].split(",");
          //将数据保持到map
            result.put(split[0], fs.length);
        }
        //遍历map
        Set<Entry<String,Integer>> set = result.entrySet();
        for (Entry<String, Integer> entry : set) {
            //System.out.println(entry.getKey()+":"+entry.getValue());
        }
        System.out.println("-------------------------");
        //将map保存到list中
        ArrayList<Entry<String,Integer>> list = new ArrayList(set);
            for (Entry<String, Integer> entry : list) {
                System.out.println(entry.getKey()+":"+entry.getValue());
            }
            //使用list.sort重写 进行排序
            list.sort(new Comparator<Entry<String,Integer>>() {

                @Override
                public int compare(Entry<String,Integer> o1, Entry<String,Integer> o2) {
                    // TODO Auto-generated method stub
                    return o2.getValue()-o1.getValue();
                }
            });
            System.out.println("************************");
            //遍历list
            System.out.println("输出排序后的列表");
            for (Entry<String, Integer> entry : list) {
                System.out.println(entry.getKey()+":"+entry.getValue());
            }
            System.out.println("输出好友数最高的前3个人");
            for(int i = 0;i<3;i++) {
                System.out.println(list.get(i).getKey());

            }

    }

}

3.求任意两人的共同好友

public class Test3 {
    static Map<String,List<String>> map;
    static {
        try {
            map = getFsInfo();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        //求任意两个人的共同好友
        Set<String> key = map.keySet();    //获得所有key
        ArrayList<String> list = new ArrayList<>(key);    //将key保存到list中
        for(int i = 0;i <list.size()-1; i++) { //注意i<list.size()-1
            String name1 = list.get(i);      //获得第一个的key value
            List<String> f1 = map.get(name1);

            for(int j = i+1; j<list.size();j++) {
                String name2 = list.get(j);
                ArrayList<String> f = new ArrayList<>(f1);   //重新复制第一个的value 防止被改变
                List<String> f2 = map.get(name2);
                f.retainAll(f2);                                //求他俩的交集
                if(f.size()>0) {
                    System.out.println(name1+"和"+name2+"的共同好友是:"+f);
                }
            }
        }

    }


    public static Map<String,List<String>> getFsInfo() throws Exception{
         BufferedReader r = new BufferedReader(new FileReader("d:/data/好友.txt"));
         String line;
         Map<String,List<String>> map = new HashMap<>();            //创建map保持数据
         while((line = r.readLine())!=null) {                       //开始读取数据
             String[] split = line.split(":");
             String name = split[0];
             String[] split2 = split[1].split(",");             
             List<String> list = Arrays.asList(split2);             //这样的集合长度是固定的
             ArrayList<String> list1 = new ArrayList<>(list);       //重新创建集合,长度可变
             map.put(name, list1);                      

         }
         r.close();
         return map;
    }




}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏和蔼的张星的图像处理专栏

372. 在O(1)时间复杂度删除链表节点复制节点的值

给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。

782
来自专栏程序你好

Java集合循环性能比较

Java开发人员通常处理ArrayList和HashSet等集合。Java 8附带了lambda和streaming API,帮助我们轻松处理集合。在大多数情况...

1505
来自专栏数据结构与算法

2952 细胞分裂 2

2952 细胞分裂 2 时间限制: 2 s 空间限制: 16000 KB 题目等级 : 钻石 Diamond 题目描述 Description 著...

3566
来自专栏风中追风

高效编程之hashmap你必须要懂的知识点

以前看Java的招聘要求:Java基础扎实,熟悉常用集合类,多线程,IO,网络编程,经常会疑惑,集合类不就ArrayList,HashMap会用,熟悉下API不...

3616
来自专栏编程之旅

反转单向链表

单向链表的反转是一个非常常见的链表类面试题,我在刷leetcode的过程中,发现了有许多链表题目的解法,都是以反转链表为基础进行的。所以我觉得有必要记录一下。

1041
来自专栏java学习

Java每日一练(2017/7/18)

新通知 ●回复"每日一练"获取以前的题目! ●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接) ●【新】HTML5知识点视频更新了!(回复【前端...

35310
来自专栏趣谈编程

可以管理时间的二叉堆

面试官:写一个堆排吧 我心想:堆排是什么鬼 理解堆排,首先要理解二叉堆。理解了二叉堆的“下沉”操作,基本上就可以理解堆排了。今天我们来看一看什么是堆,以及堆...

2176
来自专栏微信公众号:Java团长

高效遍历Java容器

通过本文,你可以更深入的学习 Java 语言中 forEach 语法的知识,以及它和 C 语言形式的 for 循环、 Steam API 的对比。

2304
来自专栏小狼的世界

Leetcode刷题记录:构建最大数二叉树

给定一个不含重复数字的数组,最大二叉树构建规则如下: 1、根是数组中最大的数字 2、左边的子树是最大数字左边的内容 3、右边的子树是最大数字右边的内容

1092
来自专栏小勇DW3

HashMap 与 ConcrrentHashMap 使用以及源码原理分析

数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为...

6303

扫码关注云+社区

领取腾讯云代金券