共同好友(java)
阿新 • • 發佈:2019-01-25
查詢兩個使用者的共同好友(例如兩個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()));
}
}
}
輸出結果為:
10
20
30
40