在 PHP 中,您可以通过以下方式向数组动态添加元素:
$x = new Array();
$x[] = 1;
$x[] = 2;
在此之后,$x
将是一个像这样的数组:{1,2}
.
有没有办法在 Java 中做类似的事情?
在 PHP 中,您可以通过以下方式向数组动态添加元素:
$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 中那样“在末尾添加一些东西”。
有点类似于 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,就像其他回答者建议的那样。
如果由于将每个 int 包装在 Integer 中的开销而要避免使用List
,请考虑使用原始类型的集合的重新实现,它们在内部使用数组,但不会对每次更改都进行复制,只有当内部数组已满时(就像 ArrayList 一样)。(一个快速谷歌搜索的例子是这个 IntList 类。)
Guava 包含在,等中创建此类包装器的方法。Ints.asList
Longs.asList
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
该问题要求将元素添加到数组,而不是 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;
}
第 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
然后使用该toArray()
方法。但是根据你在做什么,你甚至可能根本不需要一个数组。看看是否Lists
是你想要的更多。
请参阅:Java 列表教程
您可能希望为此使用 ArrayList - 用于动态大小的数组结构。
您可以使用 JAVA 中的集合框架将元素动态添加到数组中。集合框架不适用于原始数据类型。
此 Collection 框架将在“java.util.*”包中提供
例如,如果您使用 ArrayList,
为其创建一个对象,然后添加多个元素(任何类型,如字符串、整数......等)
ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");
现在您已将 3 个元素添加到数组中。
如果要删除任何添加的元素
a.remove("suman");
如果要添加任何元素,请再次
a.add("Gurram");
所以数组大小是动态增加/减少的..
使用 ArrayList 或玩弄数组来自动增加数组大小。
计算您在原始数组中的位置
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 中,数组的大小是固定的,但您可以使用其索引和 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()));
}
}
}