Beispiel #1
0
 /**
  * Uses random numbers to sample the entire map.
  *
  * @return an array of sampled elements
  */
 private LfuPolicy.Metadata[] sampleElements(Map map) {
   int[] offsets = LfuPolicy.generateRandomSample(map.size());
   DiskElement[] elements = new DiskElement[offsets.length];
   Iterator iterator = map.values().iterator();
   for (int i = 0; i < offsets.length; i++) {
     for (int j = 0; j < offsets[i]; j++) {
       iterator.next();
     }
     elements[i] = (DiskElement) iterator.next();
   }
   return elements;
 }
Beispiel #2
0
  /**
   * Uses random numbers to sample the entire map.
   *
   * <p>This implemenation uses the {@link ConcurrentHashMap} iterator.
   *
   * @return a random sample of elements
   */
  protected Element[] sampleElements(int size) {
    int[] offsets = LfuPolicy.generateRandomSample(size);
    Element[] elements = new Element[offsets.length];
    Iterator iterator = map.values().iterator();
    for (int i = 0; i < offsets.length; i++) {
      for (int j = 0; j < offsets[i]; j++) {
        // fast forward
        try {
          iterator.next();
        } catch (NoSuchElementException e) {
          // e.printStackTrace();
        }
      }

      try {
        elements[i] = ((Element) iterator.next());
      } catch (NoSuchElementException e) {
        // e.printStackTrace();
      }
    }
    return elements;
  }