aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/AbstractMap.java
diff options
context:
space:
mode:
authorBryce McKinlay <bryce@albatross.co.nz>2000-10-29 05:06:10 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2000-10-29 05:06:10 +0000
commit3a73757880cde4912de947d746e2fea7a4bbd0e8 (patch)
tree1880d4664e9f2de91bfd16e2e6c1c7c37344d891 /libjava/java/util/AbstractMap.java
parente2d79607346564139f9c2ba3e5a42ece5aab6149 (diff)
downloadgcc-3a73757880cde4912de947d746e2fea7a4bbd0e8.zip
gcc-3a73757880cde4912de947d746e2fea7a4bbd0e8.tar.gz
gcc-3a73757880cde4912de947d746e2fea7a4bbd0e8.tar.bz2
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
Diffstat (limited to 'libjava/java/util/AbstractMap.java')
-rw-r--r--libjava/java/util/AbstractMap.java263
1 files changed, 131 insertions, 132 deletions
diff --git a/libjava/java/util/AbstractMap.java b/libjava/java/util/AbstractMap.java
index 4935afe..c4f9df0 100644
--- a/libjava/java/util/AbstractMap.java
+++ b/libjava/java/util/AbstractMap.java
@@ -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() )
+
+ Map m = (Map) o;
+ Set s = m.entrySet();
+ Iterator itr = entrySet().iterator();
+ int size = size();
+
+ 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;
+
+ 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 ) )
+ int size = size();
+
+ for (int pos = 0; pos < size; pos++)
{
- value = entry.getValue();
- entries.remove();
- return value;
+ 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;
+ 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;
}