共同好友(java)

来源:互联网 发布:机械设计学什么软件 编辑:程序博客网 时间:2024/05/09 18:38

查询两个用户的共同好友(例如两个QQ用户)
例如有两个用户,他们分别有一个好友集,user1friends和user2friends,分别放到set集合中

import java.util.Set;import java.util.TreeSet;public class SameFriends {    public static Set<Integer> intersection(Set<Integer> user1friends,Set<Integer> user2friends){    //判断用户的好友是否为空        if((user1friends == null) || user1friends.isEmpty()){            return null;        }        if((user2friends == null) || user2friends.isEmpty()){            return null;        }        //判断好友数量,以用来做性能优化        if(user1friends.size() < user2friends.size()){            return intersect(user1friends, user2friends);        }else{            return intersect(user2friends, user1friends);        }    }    public static Set<Integer> intersect(Set<Integer> smallset,Set<Integer> largeset){        Set<Integer> result = new TreeSet<Integer>();        //迭代处理小集合来提高性能        for (Integer x : smallset) {            if(largeset.contains(x)){                result.add(x);            }        }        return result;    }}

测试

import java.util.Iterator;import java.util.Set;import java.util.TreeSet;public class Test1 {    public static void main(String[] args) {        Set<Integer> user1friends = new TreeSet<Integer>();        Set<Integer> user2friends = new TreeSet<Integer>();        //用户1创建9个好友,为10,20,30......        for (int i = 1; i < 10; i++) {            user1friends.add(i*10);        }        //用户2创建9个好友,为5,10,15......        for (int i = 1; i < 10; i++) {            user2friends.add(i*5);        }        Set<Integer> result = SameFriends.intersection(user1friends, user2friends);        Iterator<Integer> it = result.iterator();        while (it.hasNext()) {            System.out.println((it.next()));        }    }}

输出结果为:

10203040