以前の配列よりも 1 大きい新しい配列を作成したばかりで、最初の配列の値を新しい配列にコピーしたいと考えています。新しい配列の最後のインデックスに新しい値を追加するにはどうすればよいですか?
これは私が試したことです:
public void addTime(double newTime) {
if (numOfTimes == times.length)
increaseSize();
times[numOfTimes] = newTime;
}
java.util.List
生の配列ではなく、などのオブジェクトを使用することをお勧めします。次に、次のことを行うだけ
times.add(newTime)
で、サイジングが処理されます。
System.arraycopy 関数を使用してみませんか。
increaseSIze()
{
double [] temp = new double[times.lebgth+1];
System.arrayCopy(times,0,temp,0,times.length);
times=temp;
}
その後、サイズが1増加したtimes配列があります。
配列の操作が制約である場合は、Arrays.copyOfを検討してください。
import java.util.Arrays;
...
private void increaseSize() {
// Allocate new array with an extra trailing element with value 0.0d
this.times = Arrays.copyOf( times, times.length + 1 );
}
...
この型の配列管理を頻繁に、予測できない方法で行う場合は、ArrayListなどのJava Collection Frameworkクラスの 1 つを検討することをお勧めします。の設計目標の 1 つは、JVM 自体がメモリ管理を管理するのと同じように、サイズ管理を管理することです。ArrayList
私はここでオンラインで実行可能な例を開発しました。
最後のインデックスに新しい値を設定するには、次のことができます
times[times.length - 1] = newTime;
配列インデックスは から始まります0..n-1
。
array[array.length - 1]
配列の末尾の値をアドレス指定します。
配列の最後の項目は常にmyArray.length - 1
です。あなたの場合、 times 配列の最後の要素は ですtimes[times.length - 1]
。配列の詳細については、http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.htmlを参照してください。
しかし、もっと重要なことは、配列の容量を変更しようとしている場合、ジョブに間違ったデータ構造を使用している可能性が高いということです。Oracle を見てください(要素にアクセスするために配列のようなインデックスが必要な場合はIntroduction to Collections
特にクラス)。ArrayList
この要件に java.util.ArrayList が必要ではないのはなぜですか? 実際には、そのサイズを管理する必要はありません。これを行うだけです:
List<Double> list = new ArrayList<Double>();
list.add(newTime);