我如何dynamic地添加项目到Java数组?

在PHP中,您可以通过以下动作将元素dynamic添加到数组中:

$x = new Array(); $x[] = 1; $x[] = 2; 

在这之后, $x就是这样一个数组: {1,2}

有没有办法在Java中做类似的事情?

看看java.util.LinkedList或java.util.ArrayList

 List<Integer> x = new ArrayList<Integer>(); x.add(1); x.add(2); 

Java中的数组具有固定的大小,所以不能“在末尾添加一些东西”。 有点类似于PHP的行为:

 int[] addElement(int[] org, int added) { int[] result = Arrays.copyOf(org, org.length +1); result[org.length] = added; return result; } 

那么你可以写:

 x = new int[0]; x = addElement(x, 1); x = addElement(x, 2); System.out.println(Arrays.toString(x)); 

但是这个scheme对于更大的数组是非常低效的 ,因为它每次都会复制整个数组。 (实际上它不完全等同于PHP,因为你的旧数组保持不变)。

PHP数组实际上与Java HashMap中增加了“max key”相同,所以它会知道下一个使用哪个键,以及一个奇怪的迭代顺序(以及Integer键和一些Strings之间的奇怪的等价关系)。 但是对于简单的索引集合,更好地使用Java中的List,就像提出的其他答案一样。

如果您想避免使用List因为在Integer中包装每个int的开销,请考虑为基本types(在内部使用数组)中使用集合的重新实现,但只有在内部数组已满时才会对每个更改执行副本(就像ArrayList一样)。 (一个快速search的例子是这个IntList类 。)

Guava包含在Ints.asListLongs.asList等中创build这种包装的方法 。

Apache Commons有一个ArrayUtils实现来在新数组的末尾添加一个元素:

 /** Copies the given array and adds the given element at the end of the new array. */ public static <T> T[] add(T[] array, T element) 

您可以使用ArrayList ,然后使用toArray()方法。 但是,根据你在做什么,你可能甚至不需要一个数组。 看看如果Lists更多你想要的东西。

请参阅: Java List教程

我经常在网上看到这个问题。 在我看来,很多信誉好的人没有正确回答这个问题。 所以,在这里我想expression一下自己的答案。

首先我们应该考虑arrayarraylist之间的区别 。

问题是要求添加一个元素到一个数组,而不是ArrayList

================================================== ====================

答案是简单的退出。 它可以分3步完成。

  1. 将数组转换为数组列表
  2. 将元素添加到arrayList
  3. 将新的arrayList转换回数组

这是它的简单图片 在这里输入图像描述

最后这里是代码:

步骤1:

 public List<String> convertArrayToList(String[] array){ List<String> stringList = new ArrayList<String>(Arrays.asList(array)); return stringList; } 

第2步:

 public List<String> addToList(String element,List<String> list){ list.add(element); return list; } 

第3步:

 public String[] convertListToArray(List<String> list){ String[] ins = (String[])list.toArray(new String[list.size()]); return ins; } 

步骤4

  public String[] addNewItemToArray(String element,String [] array){ List<String> list = convertArrayToList(array); list= addToList(element,list); return convertListToArray(list); } 

您可能想要为此使用ArrayList – 用于像结构这样的dynamic大小的数组。

您可以使用JAVA中的Collection Frameworksdynamic地将元素添加到数组中。 集合框架在基本数据types上不起作用。

这个Collection框架将在“java.util。*”包中可用

例如,如果你使用ArrayList,

创build一个对象,然后添加一些元素(像String,Integer等任何types)

 ArrayList a = new ArrayList(); a.add("suman"); a.add(new Integer(3)); a.add("gurram"); 

现在你已经添加了3个元素到一个数组中。

如果你想删除任何添加的元素

 a.remove("suman"); 

再次如果你想添加任何元素

 a.add("Gurram"); 

所以数组的大小是dynamic增加/减less..

使用ArrayList或juggle数组来自动增加数组大小。

记住你在原始数组中的位置

 class recordStuff extends Thread { double[] aListOfDoubles; int i = 0; void run() { double newData; newData = getNewData(); // gets data from somewhere aListofDoubles[i] = newData; // adds it to the primitive array of doubles i++ // increments the counter for the next pass System.out.println("mode: " + doStuff()); } void doStuff() { // Calculate the mode of the double[] array for (int i = 0; i < aListOfDoubles.length; i++) { int count = 0; for (int j = 0; j < aListOfDoubles.length; j++) { if (a[j] == a[i]) count++; } if (count > maxCount) { maxCount = count; maxValue = aListOfDoubles[i]; } } return maxValue; } } 

这是一个简单的方法来添加到Java中的数组。 我用第二个数组来存储我的原始数组,然后再添加一个元素。 之后,我将这个数组传回原来的数组。

  int [] test = {12,22,33}; int [] test2= new int[test.length+1]; int m=5;int mz=0; for ( int test3: test) { test2[mz]=test3; mz++; } test2[mz++]=m; test=test2; for ( int test3: test) { System.out.println(test3); } 

在Java中,数组的大小是固定的,但是您可以使用索引和循环将元素dynamic添加到固定大小的数组中。 请看下面的例子。

 package simplejava; import java.util.Arrays; /** * * @author sashant */ public class SimpleJava { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here try{ String[] transactions; transactions = new String[10]; for(int i = 0; i < transactions.length; i++){ transactions[i] = "transaction - "+Integer.toString(i); } System.out.println(Arrays.toString(transactions)); }catch(Exception exc){ System.out.println(exc.getMessage()); System.out.println(Arrays.toString(exc.getStackTrace())); } } }