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 でリストを使用することをお勧めします。
すべての int を Integer にラップするオーバーヘッドのために使用を避けたい場合はList
、プリミティブ型のコレクションの再実装を使用することを検討してください。これは内部で配列を使用しますが、内部配列がいっぱいの場合にのみ、すべての変更でコピーを実行しません ( ArrayList と同じです)。(すばやくググった例の 1 つは、この 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)
ArrayList
を使用してからtoArray()
メソッドを使用できます。しかし、何をしているのかによっては、配列がまったく必要ない場合もあります。もっと欲しいものがあるかどうかを調べLists
てください。
参照: Java リストのチュートリアル
おそらく、これには ArrayList を使用する必要があります-構造のような動的にサイズ設定された配列の場合。
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");
したがって、配列サイズは動的に増減します。
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;
}
}