2012-04-18 4 views
0

У меня есть Java-программа, в которой хранится список игроков в крикет-клуб, использующих arraylist. В классе клуба у меня есть статическое поле, в котором отслеживается, сколько игроков зарегистрировано в клубе. Также я назначаю идентификатор игрока статическому полю, так что каждый раз, когда игрок добавляется, он получает идентификатор. Это какОбновление arraylist после удаления объектов

id = regPlayer++; 

regPlayer является статическое поле, которое инициализируется как 1

Проблема у меня в том, что если я хочу, чтобы удалить игрока из ArrayList я не могу быть способный обновлять идентификаторы. Например, если у меня есть четыре игрока, они будут иметь следующие идентификаторы, прежде чем я удалить любого из них:

Player 1 ID = 1 
Player 2 ID = 2 
Player 3 ID = 3 
Player 4 ID = 4 

Если удалить игрок 2 Теперь я хочу, чтобы третий игрок, чтобы иметь ID 2 и четвертый игрок, чтобы иметь идентификатор 3, вот так:

Player 1 = 1 
Player 3 = 2 
Player 4 = 3 

Есть ли способ достичь этого с помощью arraylists и как?

+0

Если 'playerId' привязан к индексу игрока в массиве, вы можете просто использовать индекс элемента как' playerId'. –

ответ

2

Идентификаторы обычно должны быть неизменными. Вы не должны переставлять идентификаторы, просто потому, что хотите сделать идентификатор double в качестве индекса в списке. Таким образом, не обновить идентификаторы. Это примерно то же самое, что пытаться обновить чей-то номер социального страхования ... плохая идея.

Я могу только предположить, что вы хотите, чтобы ID отражал позицию индекса, чтобы вы могли как-то быстро узнать, какую позицию занимает данный объект. Если это так, просто используйте: List.indexOf(Object) для поиска позиции, вместо того, чтобы рассчитывать на ID до также.

+0

Да, возможно, OP может объяснить, почему они хотят переназначить идентификаторы, но в целом это плохая идея. – darrengorman

+0

Хм, я думаю, это логичный ответ. Я просто нерешительно спрашиваю, стоит ли переносить идентификаторы или нет. Думаю, я просто оставлю его уникальным для каждого игрока. Спасибо –

+0

Добро пожаловать. И так как вы новичок здесь, то, как работает этот сайт, заключается в том, что если вы зададите вопрос и как один или несколько ответов, которые вы получите, вы можете «перекрыть» их. И через какое-то время, если есть один конкретный ответ, который вам больше всего помог, вы можете выбрать этот ответ, нажав на галочку рядом с ним. Оба действия присуждают ответчику «очки репутации» - дешевое волнение, но я возьму то, что смогу получить ;-) –

0

Вам необходимо присвоить идентификатор на основе индекса списка массивов. Он может быть повторно назначен при удалении элемента, и индекс будет реорганизован.

Смежные вопросы