docs: public static MutableRoaringBitmap horizontal_xor(ImmutableRoaringBitmap... bitmaps) {
      MutableRoaringBitmap answer = new MutableRoaringBitmap();
      if (bitmaps.length == 0) {
        return answer;
      }
      PriorityQueue<MappeableContainerPointer> pq = new PriorityQueue<>(bitmaps.length);
      for (int k = 0; k < bitmaps.length; ++k) {
        MappeableContainerPointer x = bitmaps[k].highLowContainer.getContainerPointer();
        if (x.getContainer() != null) {
          pq.add(x);
        }
      }
  
      while (!pq.isEmpty()) {
        MappeableContainerPointer x1 = pq.poll();
        if (pq.isEmpty() || (pq.peek().key() != x1.key())) {
          answer.getMappeableRoaringArray().append(x1.key(), x1.getContainer().clone());
          x1.advance();
          if (x1.getContainer() != null) {
            pq.add(x1);
          }
          continue;
        }
        MappeableContainerPointer x2 = pq.poll();
        MappeableContainer newc = x1.getContainer().xor(x2.getContainer());
        while (!pq.isEmpty() && (pq.peek().key() == x1.key())) {
  
          MappeableContainerPointer x = pq.poll();
          newc = newc.ixor(x.getContainer());
          x.advance();
          if (x.getContainer() != null) {
            pq.add(x);
          } else if (pq.isEmpty()) {
            break;
          }
        }
        answer.getMappeableRoaringArray().append(x1.key(), newc);
        x1.advance();
        if (x1.getContainer() != null) {
          pq.add(x1);
        }
        x2.advance();
        if (x2.getContainer() != null) {
          pq.add(x2);
        }
      }
      return answer;
    }