共同好友推荐java_社交数据分析--共同好友分析(java版)
1 数据
冒号左边为用户id,冒号右边为用户的好友列表
A:B,C,D,F,E,O
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
2 需求
求出有共同好友的用户对,及他们的共同好友,如:
A与B,有共同好友C,E
A与C,有共同好友D
.......
3 步骤分析
假如社交数据存储在本地的文件中
1 读取数据信息2 对获取的每行数据处理,按照“:”号切分,左侧为用户id,右侧是当前用户对应的好友列表(再按照“,”号切分好友列表)3 将用户和器对应的好友列表存放在map这种集合类型中,(用户id作为key,其对应的好友列表作为value【list】) 4 求出任意两个用户的共同好友的交集,求list的交集
4 使用到的技术点
IO读取文件信息,字符串切割,List和map集合存储数据和常用方法
5 代码实现
一 读取文件数据获取用户和器对应的好友列表 Map>
publicstaticMap> getUserInfo() {
Map>map=newHashMap<>();
try(BufferedReaderbr=newBufferedReader(newFileReader("d:/data/好友.txt"));//可自动释放资源){
Stringline=null;
while((line=br.readLine()) !=null) {
// 切割数据 获取每个用户对应的列表
String[]split=line.split(":");
if(split.length>= 2) {
Stringstr=split[0];// 用户
Stringstr2=split[1];
String[]fs=str2.split(",");
Listlist= Arrays.asList(fs);//注意Arrays.asList(fs)转换的这种集合的长度是固定的不可修改
map.put(str,list);
}
}
}catch(Exceptione) {
//TODOAuto-generated catch block
e.printStackTrace();
}
returnmap;
}
}
二 获取任意两个人的共同好友
为了实现获取任意两个人的共同好友,所以要对map的key,即所有的用户进行遍历操作,可以将用户的uid再放在list中 ,方便遍历和比较
publicstaticvoidmain(String[]args)throwsException {
//将共同好友数据写到指定的文件中
BufferedWriterwriter=newBufferedWriter(newFileWriter("d:/data/same.txt"));
Map>info=getUserInfo();
//存储所有的用户信息
Listus=newArrayList<>();
Setuids=info.keySet();
for(Stringuid:uids) {
us.add(uid);
}
Listfs1=null;
Listfs2=null;
for(inti= 0;i
Stringuid1=us.get(i);//前面的一个好友
Listf=info.get(uid1);//前面一个人的好友
for(intj=i+ 1;j
Stringuid2=us.get(j);//后面的一个人
Listff=info.get(uid2);//后面那个人的好友
fs1=newArrayList<>(f);
fs2=newArrayList<>(ff);
fs1.retainAll(fs2);
if(fs1!=null&&fs1.size() > 0) {
writer.write(uid1+"和"+uid2+"的共同好友:"+fs1+"\n");
System.out.println(uid1+"和"+uid2+"的共同好友:"+fs1);
writer.flush();
}
}
}
}
思考
1 获取制定两个用户的共同好友(假如用户数量非常多,加载数据需要很长时间,怎么优化?)
2 获取好友数最多的前N个用户
如有疑问请咨询 qq : 598196583
更多内容请咨询qq:598196583 附带视频资料
共同好友推荐java_社交数据分析--共同好友分析(java版)相关推荐
- 大数据workshop:《云数据·大计算:海量日志数据分析与应用》之《社交数据分析:好友推荐》篇...
大数据workshop:<云数据·大计算:海量日志数据分析与应用>之<社交数据分析:好友推荐>篇 实验背景介绍 了解更多2017云栖大会·成都峰会 TechInsight &a ...
- 共同好友推荐java_【开班典礼】初雪迎初见,白色浪漫中,他们选择从此与Java相伴!...
昨晚,当朋友圈满屏都在下着雪的时候,我知道,帝都的初雪来了~ 有人说,初雪最大的善意莫过于下在了周末前夕,谁说不是呢?! 可是对于这一批人来说,初雪还多了层意义. 当开班邂逅了初雪,这是多么奇妙的相遇 ...
- 共同好友推荐java_一种社交网络下的好友推荐算法
A New Link Prediction Algorithm Based on Social Network ZHANG Mengzhe 1 张萌哲 女 硕士研究生,主要研究方向:社交网络和个性化推 ...
- 《程序员》7月刊推荐:社交网数据库技术分析
http://www.programmer.com.cn/3711/ 传统互联网正在迈向一个全新的时代-- 社交服务网( Social Networking Service )时代,从 " ...
- 我的世界电脑版怎么下载java_我的世界端游java版怎么下载
如何在"我的世界"中安装jav 转到Internet查找jre7. 下载软件安装包后,将其安装在手机中. 手机的QQ通讯录不是很容易使用. 安装后,它将涵盖您手机的原始通讯录软件. ...
- 微信统一下单 java_微信支付之统一下单--JAVA版
都说微信支付有些坑,都抱怨微信支付的文档太烂,一会APPId,一会商户id,还有appsecret,支付API秘钥让你傻傻分不清楚,还有这里大写那里小写,几种标准,让你眼花缭乱.没错,这就是很多技术团 ...
- 退款java_微信支付-退款操作(JAVA版)
本demo基于微信扫码支付退款(扫码支付暂时没放出demo下次有时间补上) 由于只是demo很多东西没有进行封装 需注意这两个参数我使用的是out_trade_no image.png 请求XML示例 ...
- 斯坦福句法分析 java_斯坦福句法分析使用方法(java版)
首先说一下句子相似度分析的主要思想.句法分析和义元分析是两个大方向,如果学过编译原理的大概能明白其中的关系.我做的方向就是句法分析这个方向的. 斯坦福句法分析器绝对不是最好用的中文句法分析器,它的主要 ...
- java 好友推荐 算法_基于jsp的好友推荐-JavaEE实现好友推荐 - java项目源码
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的好友推荐, 该项目可用各类java课程设计大作业中, 好友推荐的系统架构分为前后台两部分, 最终实现在线上进行好友 ...
最新文章
- 【VMC实验室】在QCloud上创建您的SQL Cluster(1)
- vscode snippet利器
- NeHe教程Qt实现——lesson16
- android view 源码分析,Android ViewPager源码详细分析
- c语言return 11,二级C语言教程章节测试11.对函数的进一步讨论
- json可视化编辑器_推荐一个基于 Vue 的前端界面可视化设计器项目
- MFC程序崩溃的友好处理
- 交叉编译HTOP并移植到ARM嵌入式Linux系统
- MarkDown编辑器语法指南——SegmentFault
- 【读书笔记】JavaScript高级编程(一)
- Servlet四种访问属性--知识点
- 牛x!一个比传统数据库快 100-1000 倍的数据库!
- 知道创宇获CNNVD年度优秀技术支撑单位及漏洞预警报送专项奖
- 金融市场:最全的外汇平台资料大全(包括开户金额、点差、特色!)
- Python爬虫技术-根据【理财】关键字爬取“巨潮资讯网”的title
- 抑郁症自测量表测试软件,科学网-抑郁症自测量表(SDS)-李侠的博文
- 那些年,和女孩们同居的日子
- Word文档丢失找回之没有保存Word文档就关闭了怎么解决
- 避雷:六种职场着装可能导致你面试失败
- linux下反向解析文件的权限应该是什么,Linux 下的DNS服务器中,反向解析文件的内容包括( )...