AbstractCollection.java (addAll): Use size() instead of hasNext() in iterator loop.

2000-10-29  Bryce McKinlay  <bryce@albatross.co.nz>

	* java/util/AbstractCollection.java (addAll): Use size() instead of
	hasNext() in iterator loop.
	(clear): Ditto.
	(contains): Ditto. Simplify loop.
	(containsAll): Ditto.
	(remove): Ditto.
	(removeAll): Ditto.
	(retainAll): Ditto.
	(toArray): Ditto.
	(toString): Ditto. Use string concatenation operators, not
	StringBuffer.
	* java/util/AbstractList.java (addAll): Use size() instead of
	hasNext() in iterator loop.
	(equals): Ditto.
	(hashCode): Ditto.
	(indexOf): Ditto. Don't take null check outside of the loop.
	(iterator): Return an AbstractListItr instead of anonymous class.
	(lastIndexOf): Use a for loop bounded by size() instead of
	hasPrevious() in iterator loop.
	(listIterator): Return an AbstractListItr.
	(removeRange): Remove bounds checking code and docs.
	(AbstractListItr): New inner class. Code moved here from
	listIterator().
	(SubList.iterator): Removed. Use default implementation from
	AbstractList instead.
	(SubList.listIterator): As above.
	* java/util/AbstractMap.java (clear): Use a for loop bounded by size()
	instead of hasNext() in iterator loop.
	(containsValue): Ditto.
	(equals): Ditto.
	(get): Ditto.
	(put): Ditto.
	(putAll): Ditto.
	(remove): Ditto.
	(toString): Ditto. Use string concatenation operators, not
	StringBuffer.
	* java/util/AbstractSequentialList.java (addAll): Use a for loop
	bounded by size() instead of hasNext() in iterator loop.
	* java/util/AbstractSet.java (hashCode): Don't catch exception as
	part of normal execution flow. Do an explicit null check instead.
	* java/util/ArrayList.java (_iSize): Rename to `size'.
	(_arData): Rename to `data'.
	(get): Check lower bounds also. Simplify IndexOutOfBoundsException
	message.
	(remove): Ditto.
	(removeRange): Make protected. Don't check bounds.
	(add): Check lower bounds also. Simplify IndexOutOfBoundsException
	message.
	(addAll (Collection)): Use a size-bounded for loop instead of hasNext()
	check.
	(addAll (int, Collection)): Check lower bounds. Simplify exception
	string.
	(clone): Clone the data array too.
	(indexOf): Inline doesEqual().
	(lastIndexOf): Ditto.
	(clear): Don't set array data to null.
	(set): Check lower bounds. Simplify exception string.
	(toArray): Correct comment.
	(trimToSize): Don't update modCount, this is not a structural change.
	Add comment.

	* java/util/BitSet.java: Merged with classpath, new JDK 1.2 methods
	implemented.
	(toString): Declare `bit' as long, not int.
	(data): Made package-private, not private.

From-SVN: r37116
This commit is contained in:
Bryce McKinlay 2000-10-29 05:06:10 +00:00 committed by Bryce McKinlay
parent e2d7960734
commit 3a73757880
8 changed files with 980 additions and 892 deletions

View file

@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
@ -31,88 +31,90 @@ executable file might be covered by the GNU General Public License. */
package java.util;
public abstract class AbstractMap implements Map {
public abstract class AbstractMap implements Map
{
/**
* Remove all entries from this Map. This default implementation calls
* entrySet().clear().
*
* @throws UnsupportedOperationException
* @specnote The JCL book claims that this implementation always throws
* UnsupportedOperationException, while the online docs claim it
* calls entrySet().clear(). We take the later to be correct.
*/
public void clear()
{
entrySet().clear();
}
public boolean containsKey( Object key )
public boolean containsKey(Object key)
{
Object k;
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
{
k = ((Map.Entry)entries.next()).getKey();
if( key == null ? k == null : key.equals( k ) )
return true;
}
Set es = entrySet();
Iterator entries = es.iterator();
int size = size();
for (int pos = 0; pos < size; pos++)
{
k = ((Map.Entry) entries.next()).getKey();
if (key == null ? k == null : key.equals(k))
return true;
}
return false;
}
public boolean containsValue( Object value )
public boolean containsValue(Object value)
{
Object v;
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
{
v = ((Map.Entry)entries.next()).getValue();
if( value == null ? v == null : value.equals( v ) )
return true;
}
return false;
Set es = entrySet();
Iterator entries = es.iterator();
int size = size();
for (int pos = 0; pos < size; pos++)
{
v = ((Map.Entry) entries.next()).getValue();
if (value == null ? v == null : value.equals(v))
return true;
}
return false;
}
public abstract Set entrySet();
public boolean equals( Object o )
public boolean equals(Object o)
{
if( this == o )
if (o == this)
return true;
if( o == null || !( o instanceof Map ) )
if (!(o instanceof Map))
return false;
Map m = (Map)o;
if( m.size() != size() )
return false;
Object key, value1, value2;
Map.Entry entry;
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
{
entry = (Map.Entry)entries.next();
key = entry.getKey();
value1 = entry.getValue();
value2 = m.get( key );
if( !( ( value1 == null && value2 == null )
|| value1.equals( value2 ) ) )
return false;
}
return true;
Map m = (Map) o;
Set s = m.entrySet();
Iterator itr = entrySet().iterator();
int size = size();
if (m.size() != size)
return false;
for (int pos = 0; pos < size; pos++)
{
if (!s.contains(itr.next()))
return false;
}
return true;
}
public Object get( Object key )
public Object get(Object key)
{
Object k;
Map.Entry entry;
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
{
entry = (Map.Entry)entries.next();
k = entry.getKey();
if( key == null ? k == null : key.equals( k ) )
return entry.getValue();
}
Set s = entrySet();
Iterator entries = s.iterator();
int size = size();
for (int pos = 0; pos < size; pos++)
{
Map.Entry entry = (Map.Entry) entries.next();
Object k = entry.getKey();
if (key == null ? k == null : key.equals(k))
return entry.getValue();
}
return null;
}
@ -120,11 +122,12 @@ public abstract class AbstractMap implements Map {
public int hashCode()
{
int hashcode = 0;
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
hashcode += entries.next().hashCode();
Iterator itr = entrySet().iterator();
int size = size();
for (int pos = 0; pos < size; pos++)
{
hashcode += itr.next().hashCode();
}
return hashcode;
}
@ -135,13 +138,12 @@ public abstract class AbstractMap implements Map {
public Set keySet()
{
if( this.keySet == null )
{
this.keySet =
new AbstractSet()
if (this.keySet == null)
{
this.keySet = new AbstractSet()
{
public int size()
{
{
return AbstractMap.this.size();
}
@ -149,70 +151,71 @@ public abstract class AbstractMap implements Map {
{
return AbstractMap.this.containsKey(key);
}
public Iterator iterator()
{
{
return new Iterator()
{
{
Iterator map_iterator = AbstractMap.this.entrySet().iterator();
public boolean hasNext()
{
{
return map_iterator.hasNext();
}
public Object next()
{
return ((Map.Entry)map_iterator.next()).getKey();
{
return ((Map.Entry) map_iterator.next()).getKey();
}
public void remove()
{
{
map_iterator.remove();
}
};
}
};
}
return this.keySet;
}
return this.keySet;
}
public Object put( Object key, Object value )
public Object put(Object key, Object value)
{
throw new UnsupportedOperationException();
}
public void putAll( Map m )
public void putAll(Map m)
{
Map.Entry entry;
Iterator entries = m.entrySet().iterator();
while( entries.hasNext() )
{
entry = (Map.Entry)entries.next();
put( entry.getKey(), entry.getValue() );
}
int size = m.size();
for (int pos = 0; pos < size; pos++)
{
entry = (Map.Entry) entries.next();
put(entry.getKey(), entry.getValue());
}
}
public Object remove( Object key )
public Object remove(Object key)
{
Object k, value;
Map.Entry entry;
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
{
entry = (Map.Entry)entries.next();
k = entry.getKey();
if( key == null ? k == null : key.equals( k ) )
{
value = entry.getValue();
entries.remove();
return value;
}
}
int size = size();
return null;
for (int pos = 0; pos < size; pos++)
{
Map.Entry entry = (Map.Entry) entries.next();
Object k = entry.getKey();
if (key == null ? k == null : key.equals(k))
{
Object value = entry.getValue();
entries.remove();
return value;
}
}
return null;
}
public int size()
@ -222,62 +225,58 @@ public abstract class AbstractMap implements Map {
public String toString()
{
StringBuffer sb = new StringBuffer("{");
String comma = "";
Iterator entries = entrySet().iterator();
while( entries.hasNext() )
{
Map.Entry entry = (Map.Entry)entries.next();
sb.append(comma).append(entry.getKey())
.append('=').append(entry.getValue());
comma = ", ";
}
return sb.append('}').toString();
int size = size();
String r = "{";
for (int pos = 0; pos < size; pos++)
{
r += entries.next();
if (pos < size - 1)
r += ", ";
}
r += "}";
return r;
}
public Collection values()
{
if( this.valueCollection == null )
{
this.valueCollection =
new AbstractCollection()
if (this.valueCollection == null)
{
this.valueCollection = new AbstractCollection()
{
public int size()
{
{
return AbstractMap.this.size();
}
public Iterator iterator()
{
{
return new Iterator()
{
{
Iterator map_iterator = AbstractMap.this.entrySet().iterator();
public boolean hasNext()
{
{
return map_iterator.hasNext();
}
public Object next()
{
return ((Map.Entry)map_iterator.next()).getValue();
{
return ((Map.Entry) map_iterator.next()).getValue();
}
public void remove()
{
{
map_iterator.remove();
}
};
}
};
}
}
return this.valueCollection;
}
private Collection valueCollection = null;
private Set keySet = null;
}