前提
JavaでStackを使ったundo処理を実装しようとしていたところ、上手くいかないため質問します。
int[]を要素とするStack<int[]> stackを定義し、0のみを要素に持つint[] arrayをpushします。
次に、int[] array1にpeekでstackの先頭の配列を代入します。
この時点で、stackの先頭には0のみを持つ配列があるはずです。
ここで、array1[0]の要素を1にすると、なぜかstackの先頭の配列の0番目も1に置き換わってしまいます。
原因を教えてほしいです。
実現したいこと
- 配列を使ったStackで、peekで代入した値を書き換えても、元のstackの先頭の値は書き換わらないようにしたい。
該当のソースコード
Java
1import java.util.Stack; 2 3class Test1 { 4 static Stack<int[]> stack = new Stack<int[]>(); 5 public static void main(String[] args) { 6 int[] array = new int[2]; 7 array[0] = 0; 8 array[1] = 0; 9 10 stack.push(array); 11 int[] array1 = stack.peek(); 12 printArray(array1); 13 14 array1[0] = 1; 15 printArray(array); 16 int[] array2 = stack.peek(); 17 18 printArray(array1); 19 printArray(array2); 20 } 21 22 public static void printArray(int[] array) { 23 for (int i = 0; i < array.length; i++) { 24 System.out.printf("%2d" ,array[i]); 25 } 26 System.out.print("\n"); 27 } 28}
Java
1import java.util.Stack; 2 3class Test2 { 4 static Stack<Integer> stack = new Stack<Integer>(); 5 public static void main(String[] args) { 6 int num = 0; 7 8 stack.push(num); 9 int num1 = stack.peek(); 10 System.out.println(num1); 11 12 num1 = 1; 13 System.out.println(num); 14 int num2 = stack.peek(); 15 16 System.out.println(num1); 17 System.out.println(num2); 18 } 19}
実行結果
$ java Test1 0 0 1 0 1 0 1 0
$ java Test2 0 0 1 0
試したこと
Integer型を要素とするStackで同じようなプログラムを作っても、stackの先頭が置き換わることはありませんでした。

回答2件
あなたの回答
tips
プレビュー