diff options
author | Bryce McKinlay <bryce@albatross.co.nz> | 2000-10-29 05:06:10 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-10-29 05:06:10 +0000 |
commit | 3a73757880cde4912de947d746e2fea7a4bbd0e8 (patch) | |
tree | 1880d4664e9f2de91bfd16e2e6c1c7c37344d891 /libjava/java/util/AbstractMap.java | |
parent | e2d79607346564139f9c2ba3e5a42ece5aab6149 (diff) | |
download | gcc-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.java | 263 |
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; } |