Class WeightListRandomSelector<E>
java.lang.Object
org.miaixz.bus.core.lang.selector.WeightListRandomSelector<E>
- Type Parameters:
E- 元素类型
- All Implemented Interfaces:
Serializable,Selector<E>
动态按权重随机的随机池,底层是list实现。 原理为加入的
WeightObject依次增加权重,随机时根据权重计算随机值,然后二分查找小于等于随机值的权重,返回对应的元素。
我们假设随机池中有4个对象,其权重为4,5,1,6,权重越高,'-'越多,那么随机池如下:
[obj1, obj2, obj3, obj4 ]
[----, -----, - , ------]
然后最后一个元素的权重值为总权重值,即obj2的权重值为obj1权重+obj2本身权重,依次类推。 我们取一个总权重范围的随机数,根据随机数在'-'列表中的位置,找到对应的obj即随机到的对象。- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Constructor Summary
Constructors -
Method Summary
-
Constructor Details
-
WeightListRandomSelector
public WeightListRandomSelector()构造 -
WeightListRandomSelector
public WeightListRandomSelector(int poolSize) 构造- Parameters:
poolSize- 初始随机池大小
-
-
Method Details
-
add
-
remove
-
isEmpty
public boolean isEmpty()判断是否为空- Returns:
- 是否为空
-
select
-