Как .get работает с ArrayList, этот индекс становится пустым? - PullRequest
0 голосов
/ 30 октября 2019

Я пишу программу, которая имеет ImageView Arraylist. Я использую .get(), чтобы извлечь кости imageview из одного arraylist, и добавляю его к другому Arraylist, который покажет все выбранные кости. Я в замешательстве, потому что с помощью .get() удаляет его из оригинального Arraylist?

ArrayList<ImageView> rolledhand=new ArrayList<>(5);
    Random rand = new Random();
    for(int i=0;i<5;i++)
    {
        int randomNum = rand.nextInt(6);
        rolledhand.add(diceingame.get(randomNum));
    }

    VBox diceRolled1=new VBox(rolledhand.get(0));
    VBox diceRolled2=new VBox(rolledhand.get(0));

В моем коде выше, diceingame ArrayList уже имеет 6 кубиков для просмотра изображений, добавленных к нему,Я случайным образом выбираю один и добавляю его в свой список rolledhand 5 раз. Когда я пытаюсь вывести тот же индекс rolledhand, на моей сцене появляется только один, а не два одинаковых.


Я не пытаюсь удалить его. Я просто спрашиваю, потому что по какой-то причине моя программа не будет показывать обе кости, если они находятся в одной позиции в diceingame.

1 Ответ

1 голос
/ 30 октября 2019

ArrayList#get() ничего не удаляет. Это просто gets элемент:

public E get (int index)

Возвращает элемент в указанной позиции в этом списке.

ArrayList # get ()

Если вы хотите get и remove элемент в позиции, используйте вместо него ArrayList#remove():

publicE remove (int index)

Удаляет элемент в указанной позиции в этом списке. Смещает все последующие элементы влево (вычитает один из их индексов).

ArrayList # remove ()

Или, если вы хотите выдвинуть элемент(получить и удалить первый / последний элемент), используйте Queue или Stack.

[Редактировать]


По поводу вашего вопроса, что только один элемент появляется в представлении,согласно документу Node (от которого наследуется ImageView):

Узел может появляться не более одного раза в любом месте графа сцены. В частности, узел должен появляться не более одного раза во всех следующих случаях: в качестве корневого узла сцены, дочернего объекта ObservableList родительского элемента или как клип узла.

...

Если программа добавляет дочерний узел к Родителю (включая Группу, Регион и т. Д.), И этот узел уже является дочерним по отношению к другому Родителю или корню Сцены, узел автоматически (и автоматически) удаляется изего бывший родитель.

...