Class WeightListRandomSelector<E>

java.lang.Object
org.miaixz.bus.core.lang.selector.WeightListRandomSelector<E>
Type Parameters:
E - 元素类型
All Implemented Interfaces:
Serializable, Selector<E>

public class WeightListRandomSelector<E> extends Object implements Selector<E>, Serializable
动态按权重随机的随机池,底层是list实现。 原理为加入的WeightObject依次增加权重,随机时根据权重计算随机值,然后二分查找小于等于随机值的权重,返回对应的元素。 我们假设随机池中有4个对象,其权重为4,5,1,6,权重越高,'-'越多,那么随机池如下:

     [obj1,  obj2, obj3, obj4  ]
     [----, -----,  -  , ------]
 
然后最后一个元素的权重值为总权重值,即obj2的权重值为obj1权重+obj2本身权重,依次类推。 我们取一个总权重范围的随机数,根据随机数在'-'列表中的位置,找到对应的obj即随机到的对象。
Since:
Java 17+
Author:
Kimi Liu
See Also: