Java - Dapatkan Item / Elemen Acak Dari Daftar

1. Perkenalan

Memilih elemen Daftar acak adalah operasi yang sangat mendasar tetapi tidak begitu jelas untuk diterapkan. Dalam artikel ini, kami akan menunjukkan cara paling efisien untuk melakukan ini dalam konteks berbeda.

2. Memilih Item / Item Acak

Untuk mendapatkan item acak dari instance List , Anda perlu membuat nomor indeks acak dan kemudian mengambil item dengan nomor indeks yang dihasilkan ini menggunakan metode List.get () .

Poin kuncinya di sini adalah untuk mengingat bahwa Anda tidak boleh menggunakan indeks yang melebihi ukuran Daftar Anda .

2.1. Item Acak Tunggal

Untuk memilih indeks acak, Anda dapat menggunakan metode Random.nextInt (int terikat) :

public void givenList_shouldReturnARandomElement() { List givenList = Arrays.asList(1, 2, 3); Random rand = new Random(); int randomElement = givenList.get(rand.nextInt(givenList.size())); }

Alih-alih kelas Acak , Anda selalu dapat menggunakan metode statis Math.random () dan mengalikannya dengan ukuran daftar ( Math.random () menghasilkan nilai acak ganda antara 0 (inklusif) dan 1 (eksklusif), jadi ingatlah untuk mentransmisikannya ke int setelah perkalian).

2.2. Pilih Indeks Acak di Lingkungan Multithread

Saat menulis aplikasi multithread menggunakan instance kelas Random tunggal , dapat mengakibatkan pengambilan nilai yang sama untuk setiap proses yang mengakses instance ini. Kami selalu dapat membuat instance baru per utas dengan menggunakan kelas ThreadLocalRandom khusus :

int randomElementIndex = ThreadLocalRandom.current().nextInt(listSize) % givenList.size();

2.3. Pilih Item Acak Dengan Pengulangan

Terkadang Anda mungkin ingin memilih beberapa elemen dari daftar. Ini cukup mudah:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { Random rand = new Random(); List givenList = Arrays.asList("one", "two", "three", "four"); int numberOfElements = 2; for (int i = 0; i < numberOfElements; i++) { int randomIndex = rand.nextInt(givenList.size()); String randomElement = givenList.get(randomIndex); } }

2.4. Pilih Item Acak Tanpa Pengulangan

Di sini, Anda perlu memastikan bahwa elemen tersebut dihapus dari daftar setelah pemilihan:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); List givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; for (int i = 0; i < numberOfElements; i++) { int randomIndex = rand.nextInt(givenList.size()); String randomElement = givenList.get(randomIndex); givenList.remove(randomIndex); } }

2.5. Pilih Seri Acak

Jika Anda ingin mendapatkan serangkaian elemen secara acak, kelas Collections utils mungkin berguna:

public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); Collections.shuffle(givenList); int randomSeriesLength = 3; List randomSeries = givenList.subList(0, randomSeriesLength); }

3. Kesimpulan

Pada artikel ini, kita menjelajahi cara yang paling efisien mengambil elemen acak dari Daftar instanc e untuk skenario yang berbeda .

Contoh kode dapat ditemukan di GitHub.