ПредишенСледващото

Понякога е необходимо да се реши следния проблем: не е масив, от който можем произволно изберете елементи един по един. И ние трябва да сме сигурни, че избраните елементи ние още веднъж не се намира. Очевидното решение на челото - за да започне следващия набор, в който да се съхранява на избраните елементи от тях самите или идентификаторите им - не е добре: не само, че е необходимо да се използва повече памет, така че също няма гаранция, че следващия елемент ще се намери веднага. Колкото повече избирате елементите, толкова по-дълго ще се наложи да се търси следващата произволно елемент, който все още липсва в комплекта използва. Друг начин - да се премине на елементите, използвани в друга колекция - работи само ако оригиналното събирането позволява операцията по премахване и тя е да го прилага ефективно. Поради това не е подходящо (премахнете просто не), а за ArrayList'ov също е аут (премахване на неефективните) масиви. Но с LinkedList ще се работи е доста хубаво. Объркани само невъзможността да се възстанови първоначалното състояние след приключване на събирането на алгоритъма. След това е по-лесно да се копира цялата оригинална колекция, и я извадете от елементите. Но това не е така, ако събирането е голям, и елементите, от които се нуждаем само десетина.

Като цяло, ние използваме акъл на войника и да направи следния алгоритъм: всеки следващ избор точка ние се промени с последния елемент на масива, и намалява дължината на масива се използва в системата. В края на масива по този начин се натрупват ", използван" елементи. И за да се запази възможността да се върне в първоначалното си състояние, в близост до ArrayList ще запише оригиналните индексите се използва елементи.

Случайни масив елементи без повторения, Елууд - с блог

Случайни масив елементи без повторения, Елууд - с блог

Случайни масив елементи без повторения, Елууд - с блог

Всъщност, аз написах един клас, който реализира тази идея, и констатацията, че е полезно, аз цитирам кода.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!