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 でリストを使用することをお勧めします。

すべての int を Integer にラップするオーバーヘッドのために使用を避けたい場合はList、プリミティブ型のコレクションの再実装を使用することを検討してください。これは内部で配列を使用しますが、内部配列がいっぱいの場合にのみ、すべての変更でコピーを実行しません ( ArrayList と同じです)。(すばやくググった例の 1 つは、この 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 に答える
11

ArrayListを使用してからtoArray()メソッドを使用できます。しかし、何をしているのかによっては、配列がまったく必要ない場合もあります。もっと欲しいものがあるかどうかを調べListsてください。

参照: Java リストのチュートリアル

于 2011-02-21T02:34:00.960 に答える
5

おそらく、これには ArrayList を使用する必要があります-構造のような動的にサイズ設定された配列の場合。

于 2011-02-21T02:32:16.000 に答える
4

JAVAのコレクションフレームワークを使用して、配列に要素を動的に追加できます。コレクションFrameworkは、プリミティブデータ型では機能しません。

このコレクションフレームワークは、「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");

したがって、配列サイズは動的に増減します。

于 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 に答える