类 IntIteratorFlyweight

java.lang.Object
org.bitlap.roaringbitmap.IntIteratorFlyweight
所有已实现的接口:
Cloneable, IntIterator, PeekableIntIterator

public class IntIteratorFlyweight extends Object implements PeekableIntIterator
Fast iterator minimizing the stress on the garbage collector. You can create one reusable instance of this class and then wrap(RoaringBitmap) For better performance, consider the RoaringBitmap.forEach(org.bitlap.roaringbitmap.IntConsumer) method.
  • 构造器详细资料

    • IntIteratorFlyweight

      public IntIteratorFlyweight()
      Creates an instance that is not ready for iteration. You must first call wrap(RoaringBitmap).
    • IntIteratorFlyweight

      public IntIteratorFlyweight(RoaringBitmap r)
      Creates an instance that is ready for iteration.
      参数:
      r - bitmap to be iterated over
  • 方法详细资料

    • clone

      public PeekableIntIterator clone()
      从接口复制的说明: PeekableIntIterator
      Creates a copy of the iterator.
      指定者:
      clone 在接口中 IntIterator
      指定者:
      clone 在接口中 PeekableIntIterator
      覆盖:
      clone 在类中 Object
      返回:
      a clone of the current iterator
    • hasNext

      public boolean hasNext()
      指定者:
      hasNext 在接口中 IntIterator
      返回:
      whether there is another value
    • next

      public int next()
      指定者:
      next 在接口中 IntIterator
      返回:
      next integer value
    • wrap

      public void wrap(RoaringBitmap r)
      Prepares a bitmap for iteration
      参数:
      r - bitmap to be iterated over
    • advanceIfNeeded

      public void advanceIfNeeded(int minval)
      从接口复制的说明: PeekableIntIterator
      If needed, advance as long as the next value is smaller than minval The advanceIfNeeded method is used for performance reasons, to skip over unnecessary repeated calls to next. Suppose for example that you wish to compute the intersection between an ordered list of integers (e.g., int[] x = {1,4,5}) and a PeekableIntIterator. You might do it as follows...
      
           PeekableIntIterator j = // get an iterator
           int val = // first value from my other data structure
           j.advanceIfNeeded(val);
           while ( j.hasNext() ) {
             if(j.next() == val) {
               // ah! ah! val is in the intersection...
               // do something here
               val = // get next value?
             }
             j.advanceIfNeeded(val);
           }
           
      The benefit of calling advanceIfNeeded is that each such call can be much faster than repeated calls to "next". The underlying implementation can "skip" over some data.
      指定者:
      advanceIfNeeded 在接口中 PeekableIntIterator
      参数:
      minval - threshold
    • peekNext

      public int peekNext()
      从接口复制的说明: PeekableIntIterator
      Look at the next value without advancing The peek is useful when working with several iterators at once. Suppose that you have 100 iterators, and you want to compute their intersections without materializing the result. You might do it as follows...
      
          PriorityQueue pq = new PriorityQueue(100,
            new Comparator<PeekableIntIterator>() {
                   public int compare(PeekableIntIterator a,
                                      PeekableIntIterator b) {
                       return a.peek() - b.peek();
                   }
               });
       
          //...  populate pq
          
          while(! pq.isEmpty() ) {
            // get iterator with a smallest value
            PeekableIntIterator pi = pq.poll();
            int x = pi.next(); // advance
            // do something with x
            if(pi.hasNext()) pq.add(pi)
          }
          
      Notice how the peek method allows you to compare iterators in a way that the next method could not do.
      指定者:
      peekNext 在接口中 PeekableIntIterator
      返回:
      next value