class Twitter {
//key 关注人 Value: Set<Integer> 被关注人
HashMap<Integer, HashSet<Integer>> followMap;
//key twitterId Value: userId
LinkedHashMap<Integer, Integer> twitterMap;
public Twitter() {
followMap = new HashMap<>();
twitterMap = new LinkedHashMap<>(16, 0.75f, false);
}
public void postTweet(Integer userId, Integer twitterId) {
twitterMap.put(twitterId, userId);
//首次发Tweet 自己关注自己为了使用起来linkHashMap的能力
HashSet<Integer> selfSet = followMap.get(userId);
if (selfSet == null) {
selfSet = new HashSet<>();
followMap.put(userId, selfSet);
}
selfSet.add(userId);
}
public List<Integer> getNewsFeed(Integer userId) {
List<Integer> tmpResult = new ArrayList<>();
Set<Integer> followedSet = followMap.get(userId);
for (Map.Entry<Integer, Integer> entry : twitterMap.entrySet()) {
if (followedSet.contains(entry.getValue())) {
tmpResult.add(entry.getKey());
}
}
Collections.reverse(tmpResult);
ArrayList<Integer> result = new ArrayList<>();
int max = tmpResult.size() > 10 ? 10 : tmpResult.size();
for (int i = 0; i < max; i++) {
result.add(tmpResult.get(i));
}
return result;
}
public void follow(Integer follower, Integer followed) {
HashSet<Integer> followedSet = followMap.get(follower);
if (followedSet == null) {
followedSet = new HashSet<>();
followMap.put(follower, followedSet);
}
followedSet.add(followed);
}
public void unfollow(Integer follower, Integer followed) {
Set<Integer> followedSet = followMap.get(follower);
if (followedSet != null) {
followedSet.remove(followed);
}
}
}
/**
* Your Twitter object will be instantiated and called as such:
* Twitter obj = new Twitter();
* obj.postTweet(userId,tweetId);
* List<Integer> param_2 = obj.getNewsFeed(userId);
* obj.follow(followerId,followeeId);
* obj.unfollow(followerId,followeeId);
*/