【问题标题】:How to set max size of a List [duplicate]如何设置列表的最大大小[重复]
【发布时间】:2020-10-16 08:51:19
【问题描述】:

我需要将列表的最大大小设置为 10。 例如,像普通列表一样添加 10 个元素。但是当添加超过 10 个元素时,我需要替换它们而不是添加。

Element 1
Element 2
Element 3
Element 4
Element 5
Element 6
Element 7
Element 8
Element 9
Element 10

现在添加元素 11 时,它应该如下所示:

Element 11
Element 2
Element 3
Element 4
Element 5
Element 6
Element 7
Element 8
Element 9
Element 10

再次,在向列表中添加另一个元素之后:

Element 12
Element 11
Element 3
Element 4
Element 5
Element 6
Element 7
Element 8
Element 9
Element 10

我怎样才能做到这一点?
谢谢

【问题讨论】:

    标签: java android list arraylist collections


    【解决方案1】:

    您可以使用“双端队列”(双端队列)而不是列表。这样,FIFO 逻辑就全部由数据结构为你处理了。

    我没有在 Java 中使用它们,但它们似乎存在于 Java 6+ 中。

    另一种选择:在这个 post 中,您可以看到一个 CircularFifoQueue,它似乎可以满足您的需求。

    【讨论】:

      【解决方案2】:

      如何为您的列表制作一个自定义包装器:

      科特林

      class FiniteList<T>(private val size: Int) {
          private val list = mutableListOf<T>()
      
          fun add(item: T) {
              
              if (list.size < size) {
                  list.add(item)
              } else {
                  list.add(0, item)
                  list.removeLast()
              }
              
          }
          
          //implement other methods
      
      }
      

      Java:

      public class FiniteList<T> {
          private List<T> list;
          private int collectionSize;
      
          public FiniteListJava(int size) {
              collectionSize = size;
              new ArrayList<>(size);
          }
      
          void add(T item) {
              if (collectionSize > list.size()) {
                  list.add(item);
              } else {
                  list.add(0, item);
                  list.remove(list.size() - 1);
              }
          }
      
          //implement other methods
      
      }
      

      用法

      val finiteList = FiniteList<String>(10)
      finiteList.add("Hello World!")
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        • 2023-04-11
        • 2019-04-02
        • 2019-02-25
        • 2018-06-27
        • 2011-08-11
        • 1970-01-01
        相关资源
        最近更新 更多