前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习day16---人际关系

Java学习day16---人际关系

作者头像
曼路
发布2018-10-18 15:16:48
4320
发布2018-10-18 15:16:48
举报
文章被收录于专栏:浪淘沙

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

代码语言:javascript
复制
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.获取人员最好的用户

这里写图片描述
这里写图片描述
代码语言:javascript
复制
/**
 * 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.求任意两人的共同好友

代码语言:javascript
复制
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;
    }




}
这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年06月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档