在PHP中,您可以通过以下方式动态地向元素添加元素:
$x = new Array();
$x[] = 1;
$x[] = 2;
在此之后,$x
将是这样的数组:{1,2}
。
有没有办法在Java中做类似的事情?
答案 0 :(得分:106)
查看java.util.LinkedList或java.util.ArrayList
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
答案 1 :(得分:63)
Java中的数组具有固定的大小,因此您不能像在PHP中那样“在末尾添加内容”。
有点类似于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));
但是对于较大的数组,这种方案非常低效,因为它每次都会复制整个数组。 (事实上它并不完全等同于PHP,因为你的旧数组保持不变)。
PHP数组实际上与添加了“max key”的Java HashMap完全相同,因此它知道接下来要使用哪个键,以及奇怪的迭代顺序(以及Integer键和某些键之间的奇怪等价关系)字符串)。但对于简单的索引集合,最好在Java中使用List,就像其他提出的回答者一样。
如果由于在Integer中包装每个int的开销而要避免使用List
,请考虑对基本类型使用集合的重新实现,这些类型在内部使用数组,但不会对每个更改执行复制,只有当内部数组已满(就像ArrayList一样)。 (一个快速搜索的例子是this IntList class。)
Guava在Ints.asList
,Longs.asList
等中包含methods creating such wrappers。
答案 2 :(得分:18)
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)
答案 3 :(得分:12)
我在网络上经常看到这个问题,在我看来,许多声誉很高的人没有正确回答这些问题。所以我想在这里表达自己的答案。
首先,我们应该考虑array
和arraylist
之间的difference。
问题是要求将元素添加到数组,而不是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);
}
答案 4 :(得分:11)
您可以使用ArrayList
,然后使用toArray()
方法。但是根据你在做什么,你甚至可能根本不需要阵列。看看Lists
是否更符合您的需求。
答案 5 :(得分:5)
您可能希望为此使用ArrayList - 对于动态大小的数组,如结构。
答案 6 :(得分:4)
您可以使用JAVA中的Collection Frameworks动态地向元素添加元素。 collection Framework不适用于原始数据类型。
此Collection框架将在“java.util。*”包
中提供例如,如果您使用ArrayList,
为它创建一个对象,然后添加多个元素(任何类型,如String,Integer ......等)
ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");
现在你向数组添加了3个元素。
如果你想删除任何添加的元素
a.remove("suman");
如果你想添加任何元素,再次
a.add("Gurram");
因此数组大小动态地增加/减少..
答案 7 :(得分:1)
使用ArrayList或juggle to arrays来自动增加数组大小。
答案 8 :(得分:0)
记住你在原始数组中的位置
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;
}
}
答案 9 :(得分:0)
这是一种在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);
}
答案 10 :(得分:0)
在Java中,数组大小是固定的,但您可以使用索引和for循环动态地将元素添加到固定大小的数组中。请在下面找到示例。
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()));
}
}
}