数据结构--链表实际场景应用

实践应用场景,构造一个固定长度的列表,达到固定长度后,自动淘汰尾部的节点

    /**
     * 固定大小的容器,当添加的个数达到上限时,
     * 自动淘汰添加时间最长的元素
     *
     * @param <E>
     */
    private static class FixElementList<E> {

        /**
         * 头指针
         */
        private Node<E> head;

        /**
         * 尾指针
         */
        private Node<E> tail;

        /**
         * 容积
         */
        private Integer capacity;

        /**
         * 容器节点数
         */
        private int size;

        public FixElementList(int capacity) {
            this.capacity = capacity;
        }

        public E add(E e) {
            size++;
            Node<E> node = new Node<>(e);
            node.next = head;
            if (head != null) {
                head.before = node;
            } else {
                //初始化,那么尾指针指向当前节点
                tail = node;
            }
            head = node;

            if (size > capacity) {
                size--;
                //开始淘汰
                Node<E> lastNode = tail;
                Node<E> lastThirdNode = tail.before;
                lastThirdNode.next = null;
                tail.before = null;
                tail = lastThirdNode;
                return lastNode.e;
            } else {
                return null;
            }
        }

        private static class Node<E> {

            private E e;

            /**
             * 后指针
             */
            private Node<E> next;

            /**
             * 前指针
             */
            private Node<E> before;

            Node(E e) {
                this.e = e;
            }
        }
    }

测试代码:

    @Test
    public void test04() {
        FixElementList<Integer> lruMap = new FixElementList<>(4);
        for (int i = 1; i <= 10; i++) {
            Integer addResult = lruMap.add(i);
            if (addResult != null) {
                System.out.println("淘汰的value:" + addResult);
            }
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值