Skip to content

Commit

Permalink
MAHOUT-1115 add values() method to FastByIDMap
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/mahout/trunk@1409940 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
srowen committed Nov 15, 2012
1 parent a2375a3 commit 0600c37
Showing 1 changed file with 93 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.mahout.cf.taste.impl.common;

import java.io.Serializable;
import java.util.AbstractCollection;
import java.util.AbstractSet;
import java.util.Arrays;
import java.util.Collection;
Expand Down Expand Up @@ -268,6 +269,10 @@ public Set<Map.Entry<Long,V>> entrySet() {
return new EntrySet();
}

public Collection<V> values() {
return new ValueCollection();
}

public void rehash() {
rehash(RandomUtils.nextTwinPrime((int) (loadFactor * numEntries)));
}
Expand Down Expand Up @@ -566,4 +571,92 @@ public void remove() {

}

private final class ValueCollection extends AbstractCollection<V> {

@Override
public int size() {
return FastByIDMap.this.size();
}

@Override
public boolean isEmpty() {
return FastByIDMap.this.isEmpty();
}

@Override
public boolean contains(Object o) {
return containsValue(o);
}

@Override
public Iterator<V> iterator() {
return new ValueIterator();
}

@Override
public boolean add(V v) {
throw new UnsupportedOperationException();
}

@Override
public boolean remove(Object o) {
throw new UnsupportedOperationException();
}

@Override
public boolean addAll(Collection<? extends V> vs) {
throw new UnsupportedOperationException();
}

@Override
public boolean removeAll(Collection<?> objects) {
throw new UnsupportedOperationException();
}

@Override
public boolean retainAll(Collection<?> objects) {
throw new UnsupportedOperationException();
}

@Override
public void clear() {
FastByIDMap.this.clear();
}

private final class ValueIterator implements Iterator<V> {

private int position;
private int lastNext = -1;

@Override
public boolean hasNext() {
goToNext();
return position < values.length;
}

@Override
public V next() {
goToNext();
lastNext = position;
if (position >= values.length) {
throw new NoSuchElementException();
}
return values[position++];
}

private void goToNext() {
int length = values.length;
while (position < length && values[position] == null) {
position++;
}
}

@Override
public void remove() {
iteratorRemove(lastNext);
}

}

}
}

0 comments on commit 0600c37

Please sign in to comment.