在PHP中,您可以通过以下方式将元素动态添加到数组中:
$x = new Array();
$x[] = 1;
$x[] = 2;
之后,$x
将是一个像这样的数组:{1,2}
。
有没有办法在Java中做类似的事情?
在PHP中,您可以通过以下方式将元素动态添加到数组中:
$x = new Array();
$x[] = 1;
$x[] = 2;
之后,$x
将是一个像这样的数组:{1,2}
。
有没有办法在Java中做类似的事情?
Answers:
查看java.util.LinkedList或java.util.ArrayList
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
int[]
)的实例,只需使用toArray()
List上的方法即可。使用上面的代码,但用于x.toArray()
获取原始数组。
ARRAY
对象之类的东西或诸如此类的愚蠢行为打交道,否则最好避免使用原始数组。
List
引用使我们ArrayList
可以在需要的任何时候踢到路边。如果有人发布了更好的列表,例如SuperDuperAwesomeList
,如果我们将参考设为,我们可能需要做很多工作ArrayList
。ArrayList具有List所没有的东西。如果我们在代码中依靠这些东西,换掉就变得更加困难。
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数组与Java HashMap完全相同,只是添加了“最大键”,因此它将知道接下来要使用哪个键以及一个奇怪的迭代顺序(以及整数键和某些字符串之间的等效关系)。但是对于简单的索引集合,最好像其他答复者一样使用Java中的List。
如果List
由于将每个int包装在Integer中的开销而避免使用,请考虑对原始类型使用集合的重新实现,这些类型在内部使用数组,但仅当内部数组已满时才会对每个更改都执行复制(就像ArrayList)。(一个快速搜索过的示例就是此IntList类。)
番石榴含有制造这种包装方法中Ints.asList
,Longs.asList
等等。
ArrayList
-除了在每次添加时都不会调整大小之外,当空间用完时它会加倍大小,因此不必经常调整大小。
org
比短一result
。
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)
我经常在网络上看到这个问题,我认为许多声誉很高的人没有正确回答这些问题。因此,我想在这里表达自己的答案。
首先,我们应该考虑和之间的区别。array
arraylist
该问题要求将元素添加到array,而不是ArrayList
答案很简单。它可以分3个步骤完成。
最后是代码:
步骤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;
}
第三步:
public String[] convertListToArray(List<String> list){
String[] ins = (String[])list.toArray(new String[list.size()]);
return ins;
}
第四步
public String[] addNewItemToArray(String element,String [] array){
List<String> list = convertArrayToList(array);
list= addToList(element,list);
return convertListToArray(list);
}
您可以使用JAVA中的“收集框架”将元素动态添加到数组中。集合框架不适用于原始数据类型。
此Collection框架将以“ java.util。*”包提供
例如,如果您使用ArrayList,
创建一个对象,然后添加多个元素(任何类型,例如String,Integer ... etc)
ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");
现在,您已将3个元素添加到数组中。
如果要删除任何添加的元素
a.remove("suman");
再次,如果你想添加任何元素
a.add("Gurram");
因此,数组大小是动态增加/减少的。
记录您在原始数组中的位置
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中,数组的大小是固定的,但是您可以使用其索引和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()));
}
}
}