【问题标题】:continuously change array size in java在java中不断改变数组大小
【发布时间】:2021-04-15 06:32:04
【问题描述】:

我最近问过a question

String[] name = new String [10000]{};
while (c.moveToNext()){
     .....
.  .. . ..
 .. . 

name[i] = displayName;
i++;
}

Log.d("COUNTS_CONTACTS", Arrays.toString(name));

当我打印出COUNT_CONTACTS

我得到了巨大的输出

[B,Bs,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,.....]

这实际上发生在数组大小上。所以,我想改变数组大小。有多少用户有联系人,数组大小将与此相同。这就是我想要的。该怎么做?

我正在阅读the questionThis answered 与 ArrayList 合作。而且,He did 就像我一样。我也不想要list

【问题讨论】:

    标签: java arrays size


    【解决方案1】:

    您所要求的在 java 中是不可能的。数组具有固定大小,创建后无法更改。你有两个选择:

    • 使用列表(例如 ArrayList)。语法稍显冗长,但除此之外,它们提供了您需要的一切。
    • 要调整大小时,将数组内容复制到新数组。这可以使用如下调用来完成:System.arraycopy() 但是,复制数组是一项 CPU 密集型操作!

    如果您只关心输出,您也可以在打印代码中隐藏部分数组,但是您基本上是在重新发明轮子,*List 数据结构会做类似的事情(但以一种非常有效的方式)

    【讨论】:

      【解决方案2】:

      如果您不想使用List,并且在构建数组之前不知道要创建的联系人数量,则必须构建某种特殊逻辑。

      例如,您可以执行上面显示的操作,但您需要遍历并在达到空值时停止处理,而不是仅仅转储数组:

      for( String contact : name) {
          if ( contact == null) { break; }
          // do whatever with a real contact
      }
      

      如果您可以保证您的联系人永远不会超过 10000 个,则此方法可以正常工作。一旦你达到 10001 个联系人,你就必须重建和重新部署。

      或者,当空间不足时,您可以创建一个比上一个稍大的新数组。这就是ArrayList 所做的,但将其封装在一个有用的界面中。

      这里的要点:Java 的集合非常有用。

      【讨论】:

      【解决方案3】:

      我在想我有一个字符串。让我们以a = "name, other" 为例。他们表现得像数组。但是,我将它们声明为字符串。所以,我现在可以用comma/, 将它们分开。然后,我写了以下代码..

      String name = "";
      while (c.moveToNext()){
           .....
      .  .. . ..
       .. . 
      
      if (name1.isEmpty()){
                  name1 = displayName;
      }else {
                  name1 = name1 + ", " + displayName;
      }
      }
      
      String[] words = line.split(",");
      
      Log.d("COUNTS_CONTACTS", Arrays.toString(words));
      

      然后,我得到了我想要的..!

      【讨论】:

        【解决方案4】:

        使用一个变量来存储数组的实际值计数。然后使用StringBuilder 或其他任何东西来加入输出字符串。 (实际上这就是ArrayList 所做的)

        但管理数据结构而不是使用java.util 中的任何CollectionMap 没有任何好处

        【讨论】:

          猜你喜欢
          • 2021-12-04
          • 2022-01-01
          • 1970-01-01
          • 2012-10-01
          • 2017-07-20
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多