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;
}
}