2014-01-28 3 views
0

Я пытаюсь создать навык для кодирования, где цель состоит в создании стека с максимальным количеством элементов, поэтому, если слишком много нажатий вызывает переполнение, создается новый стек и push() и pop() работают над этим новым стеком. Если этот новый стек полностью удаляется, управление возвращается к предыдущему стеклу.ArrayList of objects intuition

Я создал ArrayList, чтобы держать все свои стеки. Я новичок в ArrayLists и столкнулись с проблемами, но вот мое мышление:

  • ArrayList из Интс держит контейнер для хранения Int на каждом элементе, и вы должны вручную заполнить элемент с чем-то вроде myArrayList .set (0,13).
  • поэтому ArrayList of Stacks содержит контейнер для хранения ссылки на стек для каждого элемента.

Но как вы храните ссылку на стек? Я не могу просто сделать myArrayList.set (0, Stack myStack). Я думаю, что правильным ответом может быть myArrayList.set (0, новый Stack()), но это не соответствует интуиции. Подобно массиву ArrayList только в контейнерах int, ArrayList ссылок на стек не должен содержать ссылки на стопку, а только пустые контейнеры.

Где мое мышление не так?

+0

Первая проблема: у вас не может быть 'ArrayList ' из-за того, что generics не работают с примитивами в Java ... –

+0

У вас есть какая-то конкретная структура данных для самих стеков? «LinkedList» может быть хорошим вариантом. И что будет входить в каждый стек? –

+2

Есть много способов ответить на этот вопрос, но если вы пытаетесь создать свои навыки, я предлагаю вам попробовать кодировать это вместе с различными альтернативами, чтобы лучше понять. Запустите его под отладчиком, чтобы увидеть, как он работает. Это поможет построить ваши навыки, а также вашу интуицию - вы не получите этого, если скажете вам ответ. – jdigital

ответ

0

Если вы собираетесь палку с ArrayList, вы можете попробовать

myArrayList.add(0, new Stack()); 

Метод добавь используется с индексом (0 в данном случае) будет толкать другие записи в ArrayList вниз (или, если быть точным , вправо, согласно документации). Если вы хотите, чтобы «выскочить» стек из myArrayList, вызовите

myArrayList.remove(0); 

Это приведет к удалению стека на 0, и переместить другой стек объектов вверх (или влево).