【问题标题】:Making a variable length array of ints制作一个可变长度的整数数组
【发布时间】:2014-07-18 09:44:36
【问题描述】:

我想要一个长度可变的整数数组。显而易见的选择是使用 ArrayList 但我可以对原始类型(例如

)执行此操作吗
ArrayList<int> myArray=new ArrayList<int>();

我不想用

ArrayList<Integer> 

因为 Integer 类在编码方面很笨拙。

编辑:从下面的答案中,我认为解决方案是编写我自己的 Integer 类。

为了回答下面关于“笨拙”的问题,让我给出一个具体的,我认为整数的常见用途,即在您想要整数的任何地方使用数组的最后一个成员。如果我只是调用数组“名称”然后得到可以操作的实际整数我需要

name.get(name.size()-1).intValue();

对我来说,对于一个简单的整数来说,这似乎是一个非常笨拙的表达式——尤其是当它在一个表达式中出现两次时。似乎 Integer 类可用的(大多数)方法绝对是多余的。举两个例子

static int compare(int a, int b)

难以置信,根据文档,这个方法返回 a-b!!

static Integer valueOf(int a)

返回整数 a 的 Integer 实例。谁能给我一个例子

new Integer(a)

没有达到完全相同的结果?

【问题讨论】:

  • 长度是可变的吗?可变?
  • 笨拙是什么意思?
  • 因为在运行时长度是不确定的,需要动态改变长度
  • 尝试从数组中取出整数值以在表达式中使用以了解我的观点 - 但请继续关注主题并回答问题
  • 使用原语几乎总是比对象等价物更“笨拙”?我不明白你为什么要坚持尝试将一个方形块敲成一个圆形的整体。

标签: java arrays arraylist


【解决方案1】:

方法一:(不推荐)

你可以这样做,但这会使代码加倍并且效率不高:

int[] a;

//get size (from command line maybe ow whatever method you want)

您最初可以设置大小 0,例如。您正在从arraylist 传输值,因此您必须写:

 while(itr.hasNext()){
  size++;} //itr is an object of Iterator
 int i=0;
 a=new int[size];
 // then loop again to store values
 while(itr.hasNext()){
  a[i]=itr.next();
  i++;} 

方法二:

或者您也可以使用ArrayList 而不会使其笨拙如下:

ArrayList al=new ArrayList();

然后您可以将 Integer 对象声明为 volatile 并像处理原始类型一样对它们执行操作。

方法三:(不推荐)

或者直接写:

ArrayList al=new ArrayList();//ignore the warning about <E>
int x=2;
al.add(2);

方法四:(推荐)

如果我是你,我会使用ArrayList&lt;Integer&gt;

更新:另一件可能有效的事情是,您可能最初创建一个 ArrayList&lt;Integer&gt; 并将值存储在那里,然后将其转换为 int[]

This SO 回答讲述了转换。引用那里的代码表格:

public static int[] convertIntegers(List<Integer> integers)
  {
     int[] ret = new int[integers.size()];
      for (int i=0; i < ret.length; i++)
      {
         ret[i] = integers.get(i).intValue();
      }
     return ret;
   }

希望这会有所帮助。

【讨论】:

  • 声明变量 volatile 有什么帮助?
【解决方案2】:

不,不可能将原始类型用作泛型类型。

【讨论】:

    【解决方案3】:

    我建议你在这种情况下使用 ArrayList 并避免使用原始类型。

    数组一经创建就无法更改其大小。你必须分配比你认为你永远需要的更大的空间

    接受必须将其重新分配到新的更大数组并将数据从旧数组复制到新数组的开销:

    System.arraycopy(oldItems, 0, newItems, 0, 10);
    

    但是使用 ArrayList 更简单。

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 2011-04-03
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多