Implemented retainAll().
git-svn-id: https://samskivert.googlecode.com/svn/trunk@742 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: ArrayIntSet.java,v 1.4 2002/04/18 00:09:17 mdb Exp $
|
// $Id: ArrayIntSet.java,v 1.5 2002/05/16 20:50:31 mdb Exp $
|
||||||
//
|
//
|
||||||
// samskivert library - useful routines for java programs
|
// samskivert library - useful routines for java programs
|
||||||
// Copyright (C) 2001 Michael Bayne
|
// Copyright (C) 2001 Michael Bayne
|
||||||
@@ -236,7 +236,32 @@ public class ArrayIntSet extends AbstractSet
|
|||||||
// documentation inherited from interface
|
// documentation inherited from interface
|
||||||
public boolean retainAll (Collection c)
|
public boolean retainAll (Collection c)
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException();
|
if (c instanceof ArrayIntSet) {
|
||||||
|
ArrayIntSet other = (ArrayIntSet)c;
|
||||||
|
// make a new array that will hold the union of our two arrays
|
||||||
|
// (this is preferable to the complicated process of repeated
|
||||||
|
// shrinking or swapping)
|
||||||
|
int[] combined = new int[Math.min(_values.length,
|
||||||
|
other._values.length)];
|
||||||
|
int nsize = 0;
|
||||||
|
for (int ii = 0; ii < _size; ii++) {
|
||||||
|
if (other.contains(_values[ii])) {
|
||||||
|
combined[nsize++] = _values[ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// keep track of whether or not things changed
|
||||||
|
boolean changed = (_size != nsize);
|
||||||
|
|
||||||
|
// stuff the new values into the right place
|
||||||
|
_values = combined;
|
||||||
|
_size = nsize;
|
||||||
|
|
||||||
|
return changed;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited from interface
|
// documentation inherited from interface
|
||||||
@@ -252,7 +277,12 @@ public class ArrayIntSet extends AbstractSet
|
|||||||
if (o instanceof ArrayIntSet) {
|
if (o instanceof ArrayIntSet) {
|
||||||
ArrayIntSet other = (ArrayIntSet)o;
|
ArrayIntSet other = (ArrayIntSet)o;
|
||||||
if (other._size == _size) {
|
if (other._size == _size) {
|
||||||
return Arrays.equals(_values, other._values);
|
for (int ii = 0; ii < _size; ii++) {
|
||||||
|
if (_values[ii] != other._values[ii]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,6 +299,14 @@ public class ArrayIntSet extends AbstractSet
|
|||||||
return hashCode;
|
return hashCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a string representation of this instance.
|
||||||
|
*/
|
||||||
|
public String toString ()
|
||||||
|
{
|
||||||
|
return StringUtil.toString(iterator());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs a binary search on our values array, looking for the
|
* Performs a binary search on our values array, looking for the
|
||||||
* specified value. Swiped from <code>java.util.Arrays</code> because
|
* specified value. Swiped from <code>java.util.Arrays</code> because
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: ArrayIntSetTest.java,v 1.2 2002/04/11 04:07:42 mdb Exp $
|
// $Id: ArrayIntSetTest.java,v 1.3 2002/05/16 20:50:31 mdb Exp $
|
||||||
//
|
//
|
||||||
// samskivert library - useful routines for java programs
|
// samskivert library - useful routines for java programs
|
||||||
// Copyright (C) 2001 Michael Bayne
|
// Copyright (C) 2001 Michael Bayne
|
||||||
@@ -49,6 +49,25 @@ public class ArrayIntSetTest extends TestCase
|
|||||||
int[] setvals = set.toIntArray();
|
int[] setvals = set.toIntArray();
|
||||||
|
|
||||||
assertTrue("values equal", Arrays.equals(values, setvals));
|
assertTrue("values equal", Arrays.equals(values, setvals));
|
||||||
|
|
||||||
|
ArrayIntSet set1 = new ArrayIntSet();
|
||||||
|
set1.add(new int[] { 1, 2, 3, 5, 7, 12, 19, 35 });
|
||||||
|
ArrayIntSet set2 = new ArrayIntSet();
|
||||||
|
set2.add(new int[] { 3, 4, 5, 11, 13, 17, 19, 25 });
|
||||||
|
|
||||||
|
ArrayIntSet set3 = new ArrayIntSet();
|
||||||
|
set3.add(new int[] { 3, 5, 19 });
|
||||||
|
|
||||||
|
// intersect sets 1 and 2; making sure that retainAll() returns
|
||||||
|
// true to indicate that set 1 was modified
|
||||||
|
assertTrue("retain modifies", set1.retainAll(set2));
|
||||||
|
|
||||||
|
// make sure the intersections were correct
|
||||||
|
assertTrue("intersection", set1.equals(set3));
|
||||||
|
|
||||||
|
// make sure that retainAll returns false if we do something that
|
||||||
|
// doesn't modify the set
|
||||||
|
assertTrue("retain didn't modify", !set1.retainAll(set3));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Test suite ()
|
public static Test suite ()
|
||||||
|
|||||||
Reference in New Issue
Block a user