88

在 PHP 中,您可以通过以下方式向数组动态添加元素:

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

在此之后,$x将是一个像这样的数组:{1,2}.

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

4

11 回答 11

115

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

List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
于 2011-02-21T02:32:03.637 回答
67

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.asListLongs.asList

于 2011-02-21T15:13:38.007 回答
20

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)
于 2011-08-25T12:59:43.170 回答
12

我在网上经常看到这个问题,在我看来,许多声誉很高的人没有正确回答这些问题。所以我想在这里表达我自己的答案。

首先,我们应该考虑和之间存在差异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);
}
于 2017-01-30T14:16:21.863 回答
11

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

请参阅:Java 列表教程

于 2011-02-21T02:34:00.960 回答
5

您可能希望为此使用 ArrayList - 用于动态大小的数组结构。

于 2011-02-21T02:32:16.000 回答
4

您可以使用 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");

所以数组大小是动态增加/减少的..

于 2011-08-25T13:18:12.200 回答
1

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

于 2011-02-21T03:07:26.857 回答
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;
    }
}
于 2013-01-04T15:18:20.643 回答
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);
    }
于 2016-11-05T07:35:29.637 回答
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()));
        }
    }

}
于 2017-09-30T09:48:01.143 回答