Module bus.core

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:
  • Constructor Details

    • WeightListRandomSelector

      public WeightListRandomSelector()
      构造
    • WeightListRandomSelector

      public WeightListRandomSelector(int poolSize)
      构造
      Parameters:
      poolSize - 初始随机池大小
  • Method Details

    • add

      public void add(E e, int weight)
      增加随机种子
      Parameters:
      e - 随机对象
      weight - 权重
    • remove

      public boolean remove(E e)
      移除随机种子
      Parameters:
      e - 随机对象
      Returns:
      是否移除成功
    • isEmpty

      public boolean isEmpty()
      判断是否为空
      Returns:
      是否为空
    • select

      public E select()
      Description copied from interface: Selector
      选择下一个对象
      Specified by:
      select in interface Selector<E>
      Returns:
      下一个对象