如何动态地将项添加到Java数组?

时间:2011-02-21 02:28:31

标签: java arrays dynamic-arrays

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

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

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

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

11 个答案:

答案 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.asListLongs.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)

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

首先,我们应该考虑arrayarraylist之间的difference

问题是要求将元素添加到数组,而不是ArrayList

答案很简单。它可以分三步完成。

  1. 将数组转换为arraylist
  2. 将元素添加到arrayList
  3. 将新的arrayList转换回数组
  4. 这是简单的图片 enter image description here

    最后这是代码:

    第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是否更符合您的需求。

请参阅:Java List Tutorial

答案 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()));
        }
    }

}