【问题标题】:Setting a Maximum limit for an ArrayList为 ArrayList 设置最大限制
【发布时间】:2019-11-18 10:22:29
【问题描述】:

因此,对于学校,我正在制定一个计划,我们正在创建一个预订系统,人们可以在其中预订可容纳 10 人的电影的门票。只要当天剧院没有满员,人们就可以将预订时间更改为第二天。

在这种情况下,数组不会有好处,因为我需要能够从数组中删除一个对象并在所述数组中腾出另一个可用空间,然后在不同的日子将删除的对象添加到不同的数组中。这部分适用于 ArrayList 但它没有大小限制,所以我坚持最好的解决方案是什么。有什么我可以研究的想法吗?

谢谢

【问题讨论】:

  • 我的提示是使用 arrayList 并在插入之前添加一个元素,验证它没有超出您想要的限制
  • 你可以通过检查数组列表size()在你的程序中施加一个限制
  • 您可以实现自己的ArrayList 并使用自定义大小逻辑逻辑覆盖add 方法

标签: java arrays arraylist


【解决方案1】:

您可以尝试以下方法,从数组开始,然后通过Arrays.asList 将其转换为列表。请注意,您只能在 List 上使用 set() 方法,而不能使用 add/remove 方法,因为它们会修改其大小:

    String[] array = {"a1","b2","c3"};
    List<String> fixed = Arrays.asList(array);
    fixed.set(0, "new_string"); // OK
    fixed.add("aNewString"); // This will throw an exception

【讨论】:

    【解决方案2】:

    您可以扩展一个已经具有您需要的功能的类,并且只覆盖实现新功能所需的方法(即强制执行大小限制)。 考虑以下解决方案:

    public class CappedList<T extends Object> extends ArrayList<T> {
    
        private final int maxSize;
    
        public CappedList(int maxSize) {
            this.maxSize = maxSize;
        }
    
        @Override
        public boolean add(T e) {
            if (this.size() == this.maxSize) {
                //Already reached max size, abort adding
                throw new IllegalStateException("List is maxed out");
            } else {
                return super.add(e);
            }
        }
    
    }
    

    为了完整起见,您还需要覆盖所有 addaddAll 重载方法。然后您可以使用这个CappedList 类而不是简单的ArrayList。一个实用函数isMaxedOut 会很方便,以避免异常处理:

    
    public boolean isMaxedOut() {
            return this.size() == this.maxSize;
        }
    

    【讨论】:

      【解决方案3】:

      这完全取决于你对语言的理解程度。

      假设首先,您可能会考虑的基本逻辑是,您应该找到 10 张门票的独特之处。显然它是一个组,它有自己的唯一标识符并且是一个日期,所以你必须专注于将你的票绑定到一个日期组,然后你应该控制每个日期填充的数量,你可能需要高级控制逻辑,而不是而不是一个可能为您完成这项工作的常用变量。

      首先,我不会每天将门票存储在不同的变量中。

      让我们详细介绍一下。

      如果你沉迷于只使用 一个 特定属性,那就是 ArrayList,我找到了很好的答案 here

      但是要获得更精确的人口并稍后访问列表,例如过滤特定日期并查看当天售出的门票,您应该使用更结构化的逻辑而不是简单的 ArrayList() ,也许你甚至应该使用不同类型的变量来存储数据。

      如果您正在学习高级编程课程,从简短的观察来看,对于一个简单的任务,我可能会说有一种方法可以使用 getter 和 setter 方法来实现限制,您可以使用任何类型的对象来存储它数据,在 ArrayList 旁边。

      或者您可以编写自己的函数来控制从列表中添加和删除元素。

      或者以更高级的方式,如果您已经了解了类概念,您可以使用类来定义票证,然后您可以在其背后构造任何逻辑。最后一个是最好的方法 - 编写易于阅读、可理解和可重用的代码,或存储特定数据并以您想要的方式控制它。

      【讨论】:

        猜你喜欢
        • 2019-03-19
        • 1970-01-01
        • 2014-12-22
        • 1970-01-01
        • 2020-12-22
        • 2013-07-12
        • 1970-01-01
        • 2019-08-26
        • 2019-03-21
        相关资源
        最近更新 更多