355. Design Twitter

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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hebastast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值