Случайное число с вероятностями

Мне интересно, что было бы лучшим способом (например, в Java) генерировать случайные числа в пределах определенного диапазона, где каждое число имеет определенную вероятность произойти или нет?

например

Генерация случайных целых чисел из [1; 3] со следующими вероятностями:

P (1) = 0,2

P (2) = 0,3

P (3) = 0,5






Сейчас я рассматриваю подход для генерации случайного целого числа в пределах [0; 100] и делаю следующее:

Если это в пределах [0; 20] -> Я получил свой случайный номер 1.

Если это в пределах [21; 50] -> Я получил свой случайный номер 2.

Если оно находится в пределах [51; 100] -> Я получил свой случайный номер 3.



Что бы вы сказали?