zoukankan      html  css  js  c++  java
  • [leetcode]355. Design Twitter设计实现一个微博系统

    //先定义一个数据结构,代表一条微博,有两个内容:发布者id,微博id(代表微博内容)
        class TwitterData
        {
            int userId;
            int twitterId;
            public TwitterData(int userId,int twitterId)
            {
                this.twitterId = twitterId;
                this.userId = userId;
            }
        }
        //用一个map存储用户和各用户的关注用户
        Map<Integer,Set<Integer>> userManager ;
        //用一个linkedList来存储所有微博
        List<TwitterData> twitterDatas ;
        /** Initialize your data structure here. */
        public Twitter() {
            userManager = new HashMap<>();
            twitterDatas= new LinkedList<>();
        }
    
        /** Compose a new tweet. */
        public void postTweet(int userId, int tweetId) {
            //用户名如果没有注册,那就自动注册
            if (!userManager.containsKey(userId))
            {
                Set<Integer> follows = new HashSet<>();
                //这里注意,要想看到自己的微博,也要关注自己
                follows.add(userId);
                userManager.put(userId,follows);
            }
            TwitterData t = new TwitterData(userId,tweetId);
            //添加到微博列表,每次都是添加到头部,代表是新的
            twitterDatas.add(0,t);
        }
    
        /** Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user herself. Tweets must be ordered from most recent to least recent. */
        //这里的意思是显示userId关注的人的前10条微博,而不是userId的微博
        public List<Integer> getNewsFeed(int userId) {
            List<Integer> res = new ArrayList<>();
            //用户如果不存在,那么就不显示
            if (userManager.containsKey(userId))
            {
                Set<Integer> follows = userManager.get(userId);
                //计数,只显示10条
                int count = 0;
                for (TwitterData t:
                     twitterDatas) {
                    if (count==10) break;
                    //只添加关注用户的微博
                    if (follows.contains(t.userId))
                    {
                        res.add(t.twitterId);
                        count++;
                    }
                }
            }
            return res;
        }
    
        /** Follower follows a followee. If the operation is invalid, it should be a no-op. */
        public void follow(int followerId, int followeeId) {
            //er是主动方,ee是被动方
            //考虑两个用户不存在的情况
            Set<Integer> follows;
            if (!userManager.containsKey(followerId))
            {
                follows = new HashSet<>();
                follows.add(followerId);
                userManager.put(followerId,follows);
            }
            if (!userManager.containsKey(followeeId))
            {
                follows = new HashSet<>();
                follows.add(followeeId);
                userManager.put(followeeId,follows);
            }
            //两者都存在后
            follows = userManager.get(followerId);
            follows.add(followeeId);
        }
    
        /** Follower unfollows a followee. If the operation is invalid, it should be a no-op. */
        public void unfollow(int followerId, int followeeId) {
            //排除各种情况后删除就行
            if (followerId!=followeeId&&userManager.containsKey(followerId)&&userManager.containsKey(followeeId))
                userManager.get(followerId).remove(followeeId);
        }
  • 相关阅读:
    Redis学习——(1)Redis安装与配置
    Ubuntu14.04安装Apache2+SVN+Trac
    Ubuntu14.04配置文件Apache2.conf
    Ubuntu系统用户忘记密码
    java中无符号类型的处理[转]
    Golang 切片(slice)扩容机制源码剖析
    无线网络:无线城域网和无线广域网
    vue项目 镜像重置的命令
    批量下载阿里云rpm包
    HttpClient psot和get请求
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8366594.html
Copyright © 2011-2022 走看看