• 请不要在回答技术问题时复制粘贴 AI 生成的内容
echooo0
V2EX  ›  程序员

一个数据队列的设计

  •  
  •   echooo0 · Dec 11, 2022 · 3358 views
    This topic created in 1424 days ago, the information mentioned may be changed or developed.

    如果一个有序队列 List 中有十个元素,要求确保每天多次取出的元素相同

    第二天取有序队列中下一个元素,这样周而复始的循环

    请问有没有简洁优雅的设计思路

    19 replies  •  2022-12-13 18:30:04 +08:00
    JasonLaw
    JasonLaw
    Dec 11, 2022 via iPhone
    1
    如果第二天没有获取操作,第三天获取到的元素是第二个还是第三个?
    echooo0
    echooo0
    OP
    Dec 11, 2022
    2
    @JasonLaw #1 第二个吧,有序队列,按顺序获取
    echooo0
    echooo0
    OP
    Dec 11, 2022
    3
    @JasonLaw #1 我目前想到的方案是 redis 队列 + redis key 设置到期时间 的组合来做,看起来不够优雅简洁
    JasonLaw
    JasonLaw
    Dec 11, 2022 via iPhone❤️1
    4
    @echooo0 在我看来,这其实就是一个循环链表,只需要记录当前所在的节点 current 就好,节点还会跟日期关联。

    如果当前日期和当前节点日期一样,那就返回当前节点,而且不移动当前节点。
    如果当前日期和当前节点日期不一样,执行 current = current.next ,然后关联当前节点和当前时间,返回当前节点。
    hefish
    hefish
    Dec 11, 2022
    5
    感觉可以用两个指针来实现。
    git00ll
    git00ll
    Dec 11, 2022❤️1
    6
    (当前日期距离 1970-01-01 之间天数只差 - offset ) % 队列大小, 怎么样
    Hurriance
    Hurriance
    Dec 12, 2022 via iPhone
    7
    觉得 6 楼的可行
    WaldenHorizon
    WaldenHorizon
    Dec 12, 2022
    8
    同 6 楼,第一反应就是用余数,如果后续队列元素数量变化,可以手动修改偏移将当天对齐到变化前
    luozic
    luozic
    Dec 12, 2022
    9
    方案越简洁越好,6 楼的不错
    RightHand
    RightHand
    Dec 12, 2022 via Android
    10
    linkedHashMap 配合 list 不好吗?
    xuanbg
    xuanbg
    Dec 12, 2022
    11
    这不就是个时间轮吗?轮子每天转 1 格,指针永远指向一个位置。
    JasonLaw
    JasonLaw
    Dec 12, 2022 via iPhone
    12
    @git00ll #6 offset 是什么?
    JasonLaw
    JasonLaw
    Dec 12, 2022 via iPhone❤️1
    13
    还有一点我想指出,这个需求跟队列没有任何关系,感觉很多人对队列的理解都错得很严重。

    来自 Wikipedia:
    In computer science, a queue is a collection of entities that are maintained in a sequence and can be modified by the addition of entities at one end of the sequence and the removal of entities from the other end of the sequence.
    tusj
    tusj
    Dec 13, 2022
    14
    13 楼说得对,这和队列有啥关系?就 n 个固定值,来回取。没有 push ,也没有 pop 啊?
    YVAN7123
    YVAN7123
    Dec 13, 2022
    15
    @JasonLaw 偏移位 以保证第一天取到的是第一个
    JasonLaw
    JasonLaw
    Dec 13, 2022 via iPhone
    16
    @YVAN7123 #15 我后来再看了一下,那个-不是减号,是一个分隔符,offset 是一个描述前面中文的一个变量,我一开始以为是减号。

    我一开始就想到这种方法,然后我觉得 op 可能有我在 1 楼描述的需求,所以我排除了数组 offset 这种方法,因为它不满足需求。
    JasonLaw
    JasonLaw
    Dec 13, 2022 via iPhone
    17
    @YVAN7123 #15 我上面的 comment 又理解错了,那么要实现 1 楼那种需求,offset 怎么维护?
    YVAN7123
    YVAN7123
    Dec 13, 2022
    18
    @JasonLaw offset
    如果是每天都减的话 就是定值不需要修改.
    如果不是每天都减的话,需要在没有减的一天 offset ++
    JasonLaw
    JasonLaw
    Dec 13, 2022 via iPhone
    19
    @YVAN7123 #18 这种方式维护 offset 也够复杂的😅
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4857 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 07:58 · PVG 15:58 · LAX 23:58 · JFK 02:58
    ♥ Do have faith in what you're doing.