355. Design Twitter

来源:互联网 发布:js设置html标签隐藏 编辑:程序博客网 时间:2024/05/23 13:03
public class Twitter {    private Map<Integer,user> usermap;    private static int timestamp=0;    class twitte{        int id;        int time;        twitte next;        twitte(int id){            this.id=id;            time=timestamp++;            next=null;        }    }    class user{        int id;        Set<Integer> fllowed;        twitte twittehead;        user(int id){            this.id=id;            fllowed=new HashSet<>();            twittehead=null;            fllow(id);        }        void fllow(int id){            fllowed.add(id);        }        void unfllow(int id){            fllowed.remove(id);        }        void post(int tweetId)        {            twitte temp=new twitte(tweetId);            temp.next=twittehead;            twittehead=temp;        }    }    class timecomparetor implements Comparator<twitte>{        public int compare(twitte t1,twitte t2){            return t2.time-t1.time;        }    }    /** Initialize your data structure here. */    public Twitter() {       usermap=new HashMap<Integer,user>();     }    public void postTweet(int userId, int tweetId) {        if(!usermap.containsKey(userId)){            user temp=new user(userId);            usermap.put(userId, temp);        }        usermap.get(userId).post(tweetId);    }    public List<Integer> getNewsFeed(int userId) {        List<Integer> ret=new LinkedList<>();        if(!usermap.containsKey(userId))            return ret;        Set<Integer> users=usermap.get(userId).fllowed;        PriorityQueue<twitte> q = new PriorityQueue<twitte>(users.size(), new  timecomparetor());        for(int user :users){            twitte temp=usermap.get(user).twittehead;            if(temp!=null)                q.add(temp);        }        int n=0;        while(!q.isEmpty()&&n<10)        {            twitte temp=q.poll();            ret.add(temp.id);            if(temp.next!=null)                q.add(temp.next);            n++;        }        return ret;    }    public void follow(int followerId, int followeeId) {        if(!usermap.containsKey(followerId)){            user temp=new user(followerId);            usermap.put(followerId,temp);        }        if(!usermap.containsKey(followeeId))        {            user temp=new user(followeeId);            usermap.put(followeeId,temp);        }        usermap.get(followerId).fllow(followeeId);    }    public void unfollow(int followerId, int followeeId) {        if(!usermap.containsKey(followerId)||followerId==followeeId)            return ;        usermap.get(followerId).unfllow(followeeId);    }}
1 0
原创粉丝点击