ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/AbstractMap.java
(Generate patch)

Comparing jsr166/src/main/java/util/AbstractMap.java (file contents):
Revision 1.15 by jsr166, Fri Jun 24 20:44:49 2005 UTC vs.
Revision 1.17 by jsr166, Sat Sep 10 20:15:50 2005 UTC

# Line 253 | Line 253 | public abstract class AbstractMap<K,V> i
253       * @throws IllegalArgumentException      {@inheritDoc}
254       */
255      public void putAll(Map<? extends K, ? extends V> m) {
256 <        Iterator<? extends Entry<? extends K, ? extends V>> i = m.entrySet().iterator();
257 <        while (i.hasNext()) {
258 <            Entry<? extends K, ? extends V> e = i.next();
259 <            put(e.getKey(), e.getValue());
260 <        }
256 >        for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
257 >            put(e.getKey(), e.getValue());
258      }
259  
260      /**
# Line 474 | Line 471 | public abstract class AbstractMap<K,V> i
471       * <tt>", "</tt> (comma and space).  Each key-value mapping is rendered as
472       * the key followed by an equals sign (<tt>"="</tt>) followed by the
473       * associated value.  Keys and values are converted to strings as by
474 <     * <tt>String.valueOf(Object)</tt>.<p>
478 <     *
479 <     * This implementation creates an empty string buffer, appends a left
480 <     * brace, and iterates over the map's <tt>entrySet</tt> view, appending
481 <     * the string representation of each <tt>map.entry</tt> in turn.  After
482 <     * appending each entry except the last, the string <tt>", "</tt> is
483 <     * appended.  Finally a right brace is appended.  A string is obtained
484 <     * from the stringbuffer, and returned.
474 >     * {@link String#valueOf(Object)}.
475       *
476 <     * @return a String representation of this map
476 >     * @return a string representation of this map
477       */
478      public String toString() {
489        StringBuilder sb = new StringBuilder();
490        sb.append("{");
491
479          Iterator<Entry<K,V>> i = entrySet().iterator();
480 <        boolean hasNext = i.hasNext();
481 <        while (hasNext) {
480 >        if (! i.hasNext())
481 >            return "{}";
482 >
483 >        StringBuilder sb = new StringBuilder();
484 >        sb.append('{');
485 >        for (;;) {
486              Entry<K,V> e = i.next();
487              K key = e.getKey();
488 <            V value = e.getValue();
489 <            if (key == this)
490 <                sb.append("(this Map)");
491 <            else
492 <                sb.append(key);
493 <            sb.append("=");
494 <            if (value == this)
495 <                sb.append("(this Map)");
505 <            else
506 <                sb.append(value);
507 <            hasNext = i.hasNext();
508 <            if (hasNext)
509 <                sb.append(", ");
510 <        }
511 <
512 <        sb.append("}");
513 <        return sb.toString();
488 >            V value = e.getValue();
489 >            sb.append(key   == this ? "(this Map)" : key);
490 >            sb.append('=');
491 >            sb.append(value == this ? "(this Map)" : value);
492 >            if (! i.hasNext())
493 >                return sb.append('}').toString();
494 >            sb.append(", ");
495 >        }
496      }
497  
498      /**
# Line 531 | Line 513 | public abstract class AbstractMap<K,V> i
513       * Test for equality, checking for nulls.
514       */
515      private static boolean eq(Object o1, Object o2) {
516 <        return (o1 == null ? o2 == null : o1.equals(o2));
516 >        return o1 == null ? o2 == null : o1.equals(o2);
517      }
518  
519      // Implementation Note: SimpleEntry and SimpleImmutableEntry
# Line 548 | Line 530 | public abstract class AbstractMap<K,V> i
530       * facilitates the process of building custom map
531       * implementations. For example, it may be convenient to return
532       * arrays of <tt>SimpleEntry</tt> instances in method
533 <     * <tt>Map.entrySet().toArray</tt>
533 >     * <tt>Map.entrySet().toArray</tt>.
534       *
535       * @since 1.6
536       */
537 <    public static class SimpleEntry<K,V> implements Entry<K,V> {
537 >    public static class SimpleEntry<K,V>
538 >        implements Entry<K,V>, java.io.Serializable
539 >    {
540 >        private static final long serialVersionUID = -8499721149061103585L;
541 >
542          private final K key;
543          private V value;
544  
# Line 618 | Line 604 | public abstract class AbstractMap<K,V> i
604          }
605  
606          public int hashCode() {
607 <            return ((key   == null)   ? 0 :   key.hashCode()) ^
608 <                   ((value == null)   ? 0 : value.hashCode());
607 >            return (key   == null ? 0 :   key.hashCode()) ^
608 >                   (value == null ? 0 : value.hashCode());
609          }
610  
611          /**
# Line 637 | Line 623 | public abstract class AbstractMap<K,V> i
623      }
624  
625      /**
626 <     * An Entry maintaining an immutable key and value, This class
626 >     * An Entry maintaining an immutable key and value.  This class
627       * does not support method <tt>setValue</tt>.  This class may be
628       * convenient in methods that return thread-safe snapshots of
629       * key-value mappings.
630       *
631       * @since 1.6
632       */
633 <    public static class SimpleImmutableEntry<K,V> implements Entry<K,V> {
633 >    public static class SimpleImmutableEntry<K,V>
634 >        implements Entry<K,V>, java.io.Serializable
635 >    {
636 >        private static final long serialVersionUID = 7138329143949025153L;
637 >
638          private final K key;
639          private final V value;
640  
# Line 711 | Line 701 | public abstract class AbstractMap<K,V> i
701          }
702  
703          public int hashCode() {
704 <            return ((key   == null)   ? 0 :   key.hashCode()) ^
705 <                   ((value == null)   ? 0 : value.hashCode());
704 >            return (key   == null ? 0 :   key.hashCode()) ^
705 >                   (value == null ? 0 : value.hashCode());
706          }
707  
708          /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines