【问题标题】:Java array declaration without hard coding the size无需硬编码大小的 Java 数组声明
【发布时间】:2011-09-28 14:00:12
【问题描述】:

如何在另一个类中初始化一个类的对象数组而不硬编码其大小?

【问题讨论】:

    标签: java arrays collections size hardcode


    【解决方案1】:

    使用List。大小不需要在创建列表时声明。 toArray() 方法将返回列表的数组表示。您可以使用多种实现,但最受欢迎的往往是 ArrayList(尽管最好将实现映射到您的特定情况)。

    【讨论】:

    • 见鬼,不需要解释! + 10 亿亿……(/讽刺)
    • @mrkhrts - 哦,你只是希望你能想到它。 ;-)
    • @Ed Staub,不。相信大家都想过。只是有些人实际上也决定提供解释。我不是果冻;]
    • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    【解决方案2】:

    数组在创建后具有固定大小。 编译时不需要知道大小,但确实需要在创建时知道。例如:

    public String[] createArray(int size) {
        // Not hard-coded, but array is not expandable
        return new String[size];
    }
    

    如果您想要一个随时间增长缩小的集合,请查看各种 List<E> 实现,例如 ArrayList<E>

    【讨论】:

      【解决方案3】:

      数组的长度是固定的。我建议使用 Collection。

      这是一篇关于收藏的文章:

      http://en.wikipedia.org/wiki/Java_collections_framework

      有了这些,您可以使用 Add() 命令或类似的命令来添加元素。

      如前面的答案所述,ArrayList 或 List 是集合。

      【讨论】:

      • 已修复。我是说收藏。
      【解决方案4】:

      Object[] 将始终是固定大小。如果您需要可变长度的集合,请尝试使用 ArrayList、LinkedList 或其他众多方法之一。

      仔细挑选集合,因为它们都有不同的性能方面。

      【讨论】:

        【解决方案5】:

        对于可变数组,使用其他容器对象。

        当使用一组对象时,使用 ArrayList 或 Vector 对象。 您还可以使用对象键存储对象,例如"Name" = "Ben" 而不是 [0] = "Ben"。

        Vector v = new Vector();
        for(int i = 0; i < 100; i++){
         Object o = new Object();
         // init object
         v.addElement(o);
        }
        
        for(int i = 0; i < 100; i++){
         Object o = v.elementAt(i);
         // manipulate object
        }
        

        现在您有一个未定义长度的对象的任意列表。 使用 vector.size() 方法找到的大小。

        java.util 包是必需的,并且是 J2SE 1.3 及更高版本的一部分。

        【讨论】:

          【解决方案6】:

          如其他地方所述,数组对象具有固定大小。如果出于某种原因必须使用数组,则可以使用以下一种或两种技术:

          • 让它比你需要的大,留下未使用的 条目为空。您可能希望保留一个“slotsUsed”变量。

          • 当数组变得太小时,制作一个更大的并复制 内容。

          这些都在 ArrayList 中使用。

          【讨论】:

            【解决方案7】:

            你可以创建一个新数组并像这样初始化它。

            String[] strArray = {"Initialize","Array","Like","This"};
            

            如果您想要一个动态大小的数组,我建议您使用 ArrayList。

            【讨论】:

              【解决方案8】:

              如果你想要一个原始数组而不是对象,你可以使用 Trove4j。否则使用 ArrayList 或 CopyOnWriteArrayList 来包装数组。还有其他 List 实现,但这些实现不像访问时间的数组。

              【讨论】:

                【解决方案9】:

                有时它很有用,如果您知道应用程序需要的对象的上限, 将数组的大小声明为

                static final int ARRAY_SIZE = 1000;
                

                这接近课程的开头,因此可以轻松更改。 在主代码中用

                实例化数组
                Object[] objects = new Object[ARRAY_SIZE];
                

                如果您要使用的数组与另一个数组的大小相同,请考虑使用

                Object[] objects = new Object[other_objects.length];
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-03-14
                  • 2012-08-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-01-20
                  • 2014-12-24
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多