public void remove(long item1, long item2) {
        lock.writeLock().lock();
        try {
            RoaringBitmap bitSet = map.get(item1);
            if (bitSet != null) {
                bitSet.remove(item2, item2 + 1);
                if (bitSet.isEmpty()) {
                    map.remove(item1, bitSet);
                }
            }
        } finally {
            lock.writeLock().unlock();
        }
    }
@Test
    public void testRemove() {
        ConcurrentBitmapSortedLongPairSet set = new ConcurrentBitmapSortedLongPairSet();
        int items = 10;
        for (int i = 0; i < items; i++) {
            set.add(1, i);
        }

        for (int i = 0; i < items / 2; i++) {
            set.remove(1, i);
        }
        assertEquals(set.size(), items / 2);

        for (int i = 0; i < items / 2; i++) {
            set.remove(2, i);
        }
        assertEquals(set.size(), items / 2);

        for (int i = 0; i < items / 2; i++) {
            set.remove(1, i + 10000);
        }
        assertEquals(set.size(), items / 2);

        for (int i = 0; i < items / 2; i++) {
            set.remove(1, i + items / 2);
        }
        assertEquals(set.size(), 0);
        assertTrue(set.isEmpty());
    }