public boolean removeAll(long[] c) { boolean changed = false; for (long o : c) { if (remove(o)) { changed = true; } } return changed; }
public boolean removeAll(long[] c) { boolean changed = false; for (long o : c) { if (remove(o)) { changed = true; } } return changed; }
public boolean removeAll(FastIDSet c) { boolean changed = false; for (long k : c.keys) { if (k != NULL && k != REMOVED && remove(k)) { changed = true; } } return changed; }
public boolean removeAll(FastIDSet c) { boolean changed = false; for (long k : c.keys) { if (k != NULL && k != REMOVED && remove(k)) { changed = true; } } return changed; }
public boolean removeAll(long[] c) { boolean changed = false; for (long o : c) { if (remove(o)) { changed = true; } } return changed; }
public boolean removeAll(FastIDSet c) { boolean changed = false; for (long k : c.keys) { if (k != NULL && k != REMOVED && remove(k)) { changed = true; } } return changed; }
/** * This exists because FastIDSet has 'retainAll' as MASK, but there is * no count of the number of items in the set. size() is supposed to do * this but does not work. */ private static int mask(FastIDSet commonSet, FastIDSet otherSet, long maxItemID) { int count = 0; for (int i = 0; i <= maxItemID; i++) { if (commonSet.contains(i)) { if (otherSet.contains(i)) { count++; } else { commonSet.remove(i); } } } return count; }
/** * This exists because FastIDSet has 'retainAll' as MASK, but there is * no count of the number of items in the set. size() is supposed to do * this but does not work. */ private static int mask(FastIDSet commonSet, FastIDSet otherSet, long maxItemID) { int count = 0; for (int i = 0; i <= maxItemID; i++) { if (commonSet.contains(i)) { if (otherSet.contains(i)) { count++; } else { commonSet.remove(i); } } } return count; }
/** * This exists because FastIDSet has 'retainAll' as MASK, but there is * no count of the number of items in the set. size() is supposed to do * this but does not work. */ private static int mask(FastIDSet commonSet, FastIDSet otherSet, long maxItemID) { int count = 0; for (int i = 0; i <= maxItemID; i++) { if (commonSet.contains(i)) { if (otherSet.contains(i)) { count++; } else { commonSet.remove(i); } } } return count; }
itemIDs.remove(itemID);
itemIDs.remove(itemID);
itemIDs.remove(itemID);
@Override public List<RecommendedItem> recommendedBecause(long userID, long itemID, int howMany) throws TasteException { Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1"); DataModel model = getDataModel(); TopItems.Estimator<Long> estimator = new RecommendedBecauseEstimator(userID, itemID); PreferenceArray prefs = model.getPreferencesFromUser(userID); int size = prefs.length(); FastIDSet allUserItems = new FastIDSet(size); for (int i = 0; i < size; i++) { allUserItems.add(prefs.getItemID(i)); } allUserItems.remove(itemID); return TopItems.getTopItems(howMany, allUserItems.iterator(), null, estimator); }
@Override public List<RecommendedItem> recommendedBecause(long userID, long itemID, int howMany) throws TasteException { Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1"); DataModel model = getDataModel(); TopItems.Estimator<Long> estimator = new RecommendedBecauseEstimator(userID, itemID); PreferenceArray prefs = model.getPreferencesFromUser(userID); int size = prefs.length(); FastIDSet allUserItems = new FastIDSet(size); for (int i = 0; i < size; i++) { allUserItems.add(prefs.getItemID(i)); } allUserItems.remove(itemID); return TopItems.getTopItems(howMany, allUserItems.iterator(), null, estimator); }
@Override public List<RecommendedItem> recommendedBecause(long userID, long itemID, int howMany) throws TasteException { Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1"); DataModel model = getDataModel(); TopItems.Estimator<Long> estimator = new RecommendedBecauseEstimator(userID, itemID); PreferenceArray prefs = model.getPreferencesFromUser(userID); int size = prefs.length(); FastIDSet allUserItems = new FastIDSet(size); for (int i = 0; i < size; i++) { allUserItems.add(prefs.getItemID(i)); } allUserItems.remove(itemID); return TopItems.getTopItems(howMany, allUserItems.iterator(), null, estimator); }
@Test public void testVersusHashSet() { FastIDSet actual = new FastIDSet(1); Collection<Integer> expected = Sets.newHashSetWithExpectedSize(1000000); Random r = RandomUtils.getRandom(); for (int i = 0; i < 1000000; i++) { double d = r.nextDouble(); Integer key = r.nextInt(100); if (d < 0.4) { assertEquals(expected.contains(key), actual.contains(key)); } else { if (d < 0.7) { assertEquals(expected.add(key), actual.add(key)); } else { assertEquals(expected.remove(key), actual.remove(key)); } assertEquals(expected.size(), actual.size()); assertEquals(expected.isEmpty(), actual.isEmpty()); } } }
@Test public void testRehash() { FastIDSet set = buildTestFastSet(); set.remove(1); set.rehash(); assertFalse(set.contains(1)); }
@Test public void testRemove() { FastIDSet set = new FastIDSet(); set.add(1); set.remove(1); assertEquals(0, set.size()); assertTrue(set.isEmpty()); assertFalse(set.contains(1)); }
@Test public void testSizeEmpty() { FastIDSet set = new FastIDSet(); assertEquals(0, set.size()); assertTrue(set.isEmpty()); set.add(1); assertEquals(1, set.size()); assertFalse(set.isEmpty()); set.remove(1); assertEquals(0, set.size()); assertTrue(set.isEmpty()); }