我如何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.asList
, Longs.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一下自己的答案。
首先我们应该考虑array
和arraylist
之间的区别 。
问题是要求添加一个元素到一个数组,而不是ArrayList
================================================== ====================
答案是简单的退出。 它可以分3步完成。
- 将数组转换为数组列表
- 将元素添加到arrayList
- 将新的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())); } } }