/** * 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; }
/** * 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; }