Вызов toArray
не добавляет значения в массив.Это из javadoc Vector.toArray
Возвращает массив, содержащий все элементы в этом векторе в правильном порядке;тип времени выполнения возвращаемого массива является типом указанного массива.Если Вектор помещается в указанный массив, он возвращается в него.В противном случае новый массив выделяется с типом времени выполнения указанного массива и размером этого вектора.
st.toArray(hello); //Now, the array contains [Java, Source, code]
st2.toArray(hello); //the array is now [hello, null, code]
st3.toArray(hello);//the array is now [bye, null, code]
Причина добавления null
явно добавлена в javadoc
Если вектор помещается в указанный массив с местом для резервирования (т. Е. Массив содержит больше элементов, чем вектор), элемент в массиве, следующий сразу за концом вектора, устанавливается равным нулю.
Чтобы скопировать содержимое трех стеков в массив, вы можете сделать
String[] myHello = new String[st.size() + st2.size() + st3.size()];
System.arraycopy(st.toArray(), 0, myHello, 0, st.size());
System.arraycopy(st2.toArray(), 0, myHello, st.size(), st2.size());
System.arraycopy(st3.toArray(), 0, myHello, st.size() + st2.size(), st3.size());
System.out.println(Arrays.toString(myHello)); //[Java, Source, code, hello, bye]
Обратите внимание, что поскольку вы используете raw type , вызывается st.toArray()
возвращает Object[]
, а не String[]
.Итак, каждый из операторов копирования выдает предупреждение.
См. Что такое необработанный тип и почему мы не должны его использовать?
РЕДАКТИРОВАТЬ: Ваш вопрос и попытка показали разные намерения.Вышеприведенное поможет вам собрать элементы стека в один массив.Если вам нужно хранить сами стеки в массиве, вам нужно объявить Stack [] stacks = new Stack[3]
и
stacks[0] = st;
stacks[1] = st2;
stacks[2] = st3;
С этим вы можете сделать stacks[i].push(stacks[i].pop());