< prev index next >

src/java.desktop/share/classes/javax/print/attribute/HashAttributeSet.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 30,67 **** import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.HashMap; /** ! * Class HashAttributeSet provides an {@code AttributeSet} * implementation with characteristics of a hash map. * * @author Alan Kaminsky */ public class HashAttributeSet implements AttributeSet, Serializable { private static final long serialVersionUID = 5311560590283707917L; /** * The interface of which all members of this attribute set must be an ! * instance. It is assumed to be interface {@link Attribute Attribute} ! * or a subinterface thereof. * @serial */ private Class<?> myInterface; ! /* ! * A HashMap used by the implementation. ! * The serialised form doesn't include this instance variable. */ private transient HashMap<Class<?>, Attribute> attrMap = new HashMap<>(); /** ! * Write the instance to a stream (ie serialize the object) * ! * @serialData ! * The serialized form of an attribute set explicitly writes the * number of attributes in the set, and each of the attributes. * This does not guarantee equality of serialized forms since * the order in which the attributes are written is not defined. */ private void writeObject(ObjectOutputStream s) throws IOException { --- 30,72 ---- import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.HashMap; /** ! * Class {@code HashAttributeSet} provides an {@code AttributeSet} * implementation with characteristics of a hash map. * * @author Alan Kaminsky */ public class HashAttributeSet implements AttributeSet, Serializable { + /** + * Use serialVersionUID from JDK 1.4 for interoperability. + */ private static final long serialVersionUID = 5311560590283707917L; /** * The interface of which all members of this attribute set must be an ! * instance. It is assumed to be interface {@link Attribute Attribute} or a ! * subinterface thereof. ! * * @serial */ private Class<?> myInterface; ! /** ! * A {@code HashMap} used by the implementation. The serialised form doesn't ! * include this instance variable. */ private transient HashMap<Class<?>, Attribute> attrMap = new HashMap<>(); /** ! * Write the instance to a stream (ie serialize the object). * ! * @param s the output stream ! * @throws IOException if an I/O exception has occurred ! * @serialData The serialized form of an attribute set explicitly writes the * number of attributes in the set, and each of the attributes. * This does not guarantee equality of serialized forms since * the order in which the attributes are written is not defined. */ private void writeObject(ObjectOutputStream s) throws IOException {
*** 74,83 **** --- 79,92 ---- } } /** * Reconstitute an instance from a stream that is, deserialize it). + * + * @param s the input stream + * @throws ClassNotFoundException if the class is not found + * @throws IOException if an I/O exception has occurred */ private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { s.defaultReadObject();
*** 96,158 **** public HashAttributeSet() { this(Attribute.class); } /** ! * Construct a new attribute set, ! * initially populated with the given attribute. ! * ! * @param attribute Attribute value to add to the set. * ! * @exception NullPointerException ! * (unchecked exception) Thrown if {@code attribute} is null. */ public HashAttributeSet(Attribute attribute) { this (attribute, Attribute.class); } /** ! * Construct a new attribute set, ! * initially populated with the values from the ! * given array. The new attribute set is populated by ! * adding the elements of {@code attributes} array to the set in ! * sequence, starting at index 0. Thus, later array elements may replace ! * earlier array elements if the array contains duplicate attribute ! * values or attribute categories. ! * ! * @param attributes Array of attribute values to add to the set. ! * If null, an empty attribute set is constructed. ! * ! * @exception NullPointerException ! * (unchecked exception) Thrown if any element of ! * {@code attributes} is null. */ public HashAttributeSet(Attribute[] attributes) { this (attributes, Attribute.class); } /** ! * Construct a new attribute set, ! * initially populated with the values from the given set. ! * ! * @param attributes Set of attributes from which to initialise this set. ! * If null, an empty attribute set is constructed. * */ public HashAttributeSet(AttributeSet attributes) { this (attributes, Attribute.class); } /** ! * Construct a new, empty attribute set, where the members of ! * the attribute set are restricted to the given interface. * ! * @param interfaceName The interface of which all members of this ! * attribute set must be an instance. It is assumed to ! * be interface {@link Attribute Attribute} or a ! * subinterface thereof. ! * @exception NullPointerException if interfaceName is null. */ protected HashAttributeSet(Class<?> interfaceName) { if (interfaceName == null) { throw new NullPointerException("null interface"); } --- 105,159 ---- public HashAttributeSet() { this(Attribute.class); } /** ! * Construct a new attribute set, initially populated with the given ! * attribute. * ! * @param attribute attribute value to add to the set ! * @throws NullPointerException if {@code attribute} is {@code null} */ public HashAttributeSet(Attribute attribute) { this (attribute, Attribute.class); } /** ! * Construct a new attribute set, initially populated with the values from ! * the given array. The new attribute set is populated by adding the ! * elements of {@code attributes} array to the set in sequence, starting at ! * index 0. Thus, later array elements may replace earlier array elements if ! * the array contains duplicate attribute values or attribute categories. ! * ! * @param attributes array of attribute values to add to the set. If ! * {@code null}, an empty attribute set is constructed. ! * @throws NullPointerException if any element of {@code attributes} is ! * {@code null} */ public HashAttributeSet(Attribute[] attributes) { this (attributes, Attribute.class); } /** ! * Construct a new attribute set, initially populated with the values from ! * the given set. * + * @param attributes set of attributes from which to initialise this set. + * If {@code null}, an empty attribute set is constructed. */ public HashAttributeSet(AttributeSet attributes) { this (attributes, Attribute.class); } /** ! * Construct a new, empty attribute set, where the members of the attribute ! * set are restricted to the given interface. * ! * @param interfaceName the interface of which all members of this ! * attribute set must be an instance. It is assumed to be interface ! * {@link Attribute Attribute} or a subinterface thereof. ! * @throws NullPointerException if {@code interfaceName} is {@code null} */ protected HashAttributeSet(Class<?> interfaceName) { if (interfaceName == null) { throw new NullPointerException("null interface"); }
*** 162,216 **** /** * Construct a new attribute set, initially populated with the given * attribute, where the members of the attribute set are restricted to the * given interface. * ! * @param attribute Attribute value to add to the set. ! * @param interfaceName The interface of which all members of this ! * attribute set must be an instance. It is assumed to ! * be interface {@link Attribute Attribute} or a ! * subinterface thereof. ! * ! * @exception NullPointerException ! * (unchecked exception) Thrown if {@code attribute} is null. ! * @exception NullPointerException if interfaceName is null. ! * @exception ClassCastException ! * (unchecked exception) Thrown if {@code attribute} is not an ! * instance of {@code interfaceName}. */ protected HashAttributeSet(Attribute attribute, Class<?> interfaceName) { if (interfaceName == null) { throw new NullPointerException("null interface"); } myInterface = interfaceName; add (attribute); } /** ! * Construct a new attribute set, where the members of the attribute ! * set are restricted to the given interface. ! * The new attribute set is populated ! * by adding the elements of {@code attributes} array to the set in ! * sequence, starting at index 0. Thus, later array elements may replace ! * earlier array elements if the array contains duplicate attribute ! * values or attribute categories. ! * ! * @param attributes Array of attribute values to add to the set. If ! * null, an empty attribute set is constructed. ! * @param interfaceName The interface of which all members of this ! * attribute set must be an instance. It is assumed to ! * be interface {@link Attribute Attribute} or a ! * subinterface thereof. ! * ! * @exception NullPointerException ! * (unchecked exception) Thrown if any element of ! * {@code attributes} is null. ! * @exception NullPointerException if interfaceName is null. ! * @exception ClassCastException ! * (unchecked exception) Thrown if any element of ! * {@code attributes} is not an instance of ! * {@code interfaceName}. */ protected HashAttributeSet(Attribute[] attributes, Class<?> interfaceName) { if (interfaceName == null) { throw new NullPointerException("null interface"); } --- 163,206 ---- /** * Construct a new attribute set, initially populated with the given * attribute, where the members of the attribute set are restricted to the * given interface. * ! * @param attribute attribute value to add to the set ! * @param interfaceName the interface of which all members of this ! * attribute set must be an instance. It is assumed to be interface ! * {@link Attribute Attribute} or a subinterface thereof. ! * @throws NullPointerException if {@code attribute} or ! * {@code interfaceName} are {@code null} ! * @throws ClassCastException if {@code attribute} is not an instance of ! * {@code interfaceName} */ protected HashAttributeSet(Attribute attribute, Class<?> interfaceName) { if (interfaceName == null) { throw new NullPointerException("null interface"); } myInterface = interfaceName; add (attribute); } /** ! * Construct a new attribute set, where the members of the attribute set are ! * restricted to the given interface. The new attribute set is populated by ! * adding the elements of {@code attributes} array to the set in sequence, ! * starting at index 0. Thus, later array elements may replace earlier array ! * elements if the array contains duplicate attribute values or attribute ! * categories. ! * ! * @param attributes array of attribute values to add to the set. If ! * {@code null}, an empty attribute set is constructed. ! * @param interfaceName the interface of which all members of this ! * attribute set must be an instance. It is assumed to be interface ! * {@link Attribute Attribute} or a subinterface thereof. ! * @throws NullPointerException if {@code interfaceName} is {@code null}, or ! * if any element of {@code attributes} is {@code null} ! * @throws ClassCastException if any element of {@code attributes} is not an ! * instance of {@code interfaceName} */ protected HashAttributeSet(Attribute[] attributes, Class<?> interfaceName) { if (interfaceName == null) { throw new NullPointerException("null interface"); }
*** 220,244 **** add (attributes[i]); } } /** ! * Construct a new attribute set, initially populated with the ! * values from the given set where the members of the attribute ! * set are restricted to the given interface. * * @param attributes set of attribute values to initialise the set. If ! * null, an empty attribute set is constructed. * @param interfaceName The interface of which all members of this ! * attribute set must be an instance. It is assumed to ! * be interface {@link Attribute Attribute} or a ! * subinterface thereof. ! * ! * @exception ClassCastException ! * (unchecked exception) Thrown if any element of ! * {@code attributes} is not an instance of ! * {@code interfaceName}. */ protected HashAttributeSet(AttributeSet attributes, Class<?> interfaceName) { myInterface = interfaceName; if (attributes != null) { Attribute[] attribArray = attributes.toArray(); --- 210,230 ---- add (attributes[i]); } } /** ! * Construct a new attribute set, initially populated with the values from ! * the given set where the members of the attribute set are restricted to ! * the given interface. * * @param attributes set of attribute values to initialise the set. If ! * {@code null}, an empty attribute set is constructed. * @param interfaceName The interface of which all members of this ! * attribute set must be an instance. It is assumed to be interface ! * {@link Attribute Attribute} or a subinterface thereof. ! * @throws ClassCastException if any element of {@code attributes} is not an ! * instance of {@code interfaceName} */ protected HashAttributeSet(AttributeSet attributes, Class<?> interfaceName) { myInterface = interfaceName; if (attributes != null) { Attribute[] attribArray = attributes.toArray();
*** 249,301 **** } } /** * Returns the attribute value which this attribute set contains in the ! * given attribute category. Returns {@code null} if this attribute set ! * does not contain any attribute value in the given attribute category. * ! * @param category Attribute category whose associated attribute value ! * is to be returned. It must be a ! * {@link java.lang.Class Class} ! * that implements interface {@link Attribute ! * Attribute}. ! * ! * @return The attribute value in the given attribute category contained ! * in this attribute set, or {@code null} if this attribute set ! * does not contain any attribute value in the given attribute ! * category. ! * ! * @throws NullPointerException ! * (unchecked exception) Thrown if the {@code category} is null. ! * @throws ClassCastException ! * (unchecked exception) Thrown if the {@code category} is not a ! * {@link java.lang.Class Class} that implements interface {@link ! * Attribute Attribute}. */ public Attribute get(Class<?> category) { return attrMap.get(AttributeSetUtilities. verifyAttributeCategory(category, Attribute.class)); } /** ! * Adds the specified attribute to this attribute set if it is not ! * already present, first removing any existing in the same ! * attribute category as the specified attribute value. ! * ! * @param attribute Attribute value to be added to this attribute set. * * @return {@code true} if this attribute set changed as a result of the ! * call, i.e., the given attribute value was not already a ! * member of this attribute set. ! * ! * @throws NullPointerException ! * (unchecked exception) Thrown if the {@code attribute} is null. ! * @throws UnmodifiableSetException ! * (unchecked exception) Thrown if this attribute set does not support ! * the {@code add()} operation. */ public boolean add(Attribute attribute) { Object oldAttribute = attrMap.put(attribute.getCategory(), AttributeSetUtilities. --- 235,276 ---- } } /** * Returns the attribute value which this attribute set contains in the ! * given attribute category. Returns {@code null} if this attribute set does ! * not contain any attribute value in the given attribute category. * ! * @param category attribute category whose associated attribute value is ! * to be returned. It must be a {@link Class Class} that implements ! * interface {@link Attribute Attribute}. ! * @return the attribute value in the given attribute category contained in ! * this attribute set, or {@code null} if this attribute set does ! * not contain any attribute value in the given attribute category ! * @throws NullPointerException if the {@code category} is {@code null} ! * @throws ClassCastException if the {@code category} is not a ! * {@link Class Class} that implements interface ! * {@link Attribute Attribute} */ public Attribute get(Class<?> category) { return attrMap.get(AttributeSetUtilities. verifyAttributeCategory(category, Attribute.class)); } /** ! * Adds the specified attribute to this attribute set if it is not already ! * present, first removing any existing in the same attribute category as ! * the specified attribute value. * + * @param attribute attribute value to be added to this attribute set * @return {@code true} if this attribute set changed as a result of the ! * call, i.e., the given attribute value was not already a member of ! * this attribute set ! * @throws NullPointerException if the {@code attribute} is {@code null} ! * @throws UnmodifiableSetException if this attribute set does not support ! * the {@code add()} operation */ public boolean add(Attribute attribute) { Object oldAttribute = attrMap.put(attribute.getCategory(), AttributeSetUtilities.
*** 303,418 **** return (!attribute.equals(oldAttribute)); } /** * Removes any attribute for this category from this attribute set if ! * present. If {@code category} is null, then ! * {@code remove()} does nothing and returns {@code false}. ! * ! * @param category Attribute category to be removed from this ! * attribute set. * * @return {@code true} if this attribute set changed as a result of the * call, i.e., the given attribute category had been a member of ! * this attribute set. ! * ! * @throws UnmodifiableSetException ! * (unchecked exception) Thrown if this attribute set does not ! * support the {@code remove()} operation. */ public boolean remove(Class<?> category) { return category != null && AttributeSetUtilities. verifyAttributeCategory(category, Attribute.class) != null && attrMap.remove(category) != null; } /** ! * Removes the specified attribute from this attribute set if ! * present. If {@code attribute} is null, then ! * {@code remove()} does nothing and returns {@code false}. ! * ! * @param attribute Attribute value to be removed from this attribute set. * * @return {@code true} if this attribute set changed as a result of the ! * call, i.e., the given attribute value had been a member of ! * this attribute set. ! * ! * @throws UnmodifiableSetException ! * (unchecked exception) Thrown if this attribute set does not ! * support the {@code remove()} operation. */ public boolean remove(Attribute attribute) { return attribute != null && attrMap.remove(attribute.getCategory()) != null; } /** ! * Returns {@code true} if this attribute set contains an ! * attribute for the specified category. ! * ! * @param category whose presence in this attribute set is ! * to be tested. * ! * @return {@code true} if this attribute set contains an attribute ! * value for the specified category. */ public boolean containsKey(Class<?> category) { return category != null && AttributeSetUtilities. verifyAttributeCategory(category, Attribute.class) != null && attrMap.get(category) != null; } /** ! * Returns {@code true} if this attribute set contains the given ! * attribute. ! * ! * @param attribute value whose presence in this attribute set is ! * to be tested. * ! * @return {@code true} if this attribute set contains the given ! * attribute value. */ public boolean containsValue(Attribute attribute) { return attribute != null && attribute instanceof Attribute && attribute.equals(attrMap.get(attribute.getCategory())); } /** ! * Adds all of the elements in the specified set to this attribute. ! * The outcome is the same as if the ! * {@link #add(Attribute) add(Attribute)} ! * operation had been applied to this attribute set successively with ! * each element from the specified set. ! * The behavior of the {@code addAll(AttributeSet)} ! * operation is unspecified if the specified set is modified while ! * the operation is in progress. ! * <P> ! * If the {@code addAll(AttributeSet)} operation throws an exception, ! * the effect on this attribute set's state is implementation dependent; ! * elements from the specified set before the point of the exception may ! * or may not have been added to this attribute set. ! * ! * @param attributes whose elements are to be added to this attribute ! * set. * * @return {@code true} if this attribute set changed as a result of the ! * call. ! * ! * @throws UnmodifiableSetException ! * (Unchecked exception) Thrown if this attribute set does not ! * support the {@code addAll(AttributeSet)} method. ! * @throws NullPointerException ! * (Unchecked exception) Thrown if some element in the specified ! * set is null, or the set is null. ! * * @see #add(Attribute) */ public boolean addAll(AttributeSet attributes) { Attribute []attrs = attributes.toArray(); --- 278,374 ---- return (!attribute.equals(oldAttribute)); } /** * Removes any attribute for this category from this attribute set if ! * present. If {@code category} is {@code null}, then {@code remove()} does ! * nothing and returns {@code false}. * + * @param category attribute category to be removed from this attribute set * @return {@code true} if this attribute set changed as a result of the * call, i.e., the given attribute category had been a member of ! * this attribute set ! * @throws UnmodifiableSetException if this attribute set does not support ! * the {@code remove()} operation */ public boolean remove(Class<?> category) { return category != null && AttributeSetUtilities. verifyAttributeCategory(category, Attribute.class) != null && attrMap.remove(category) != null; } /** ! * Removes the specified attribute from this attribute set if present. If ! * {@code attribute} is {@code null}, then {@code remove()} does nothing and ! * returns {@code false}. * + * @param attribute attribute value to be removed from this attribute set * @return {@code true} if this attribute set changed as a result of the ! * call, i.e., the given attribute value had been a member of this ! * attribute set ! * @throws UnmodifiableSetException if this attribute set does not support ! * the {@code remove()} operation */ public boolean remove(Attribute attribute) { return attribute != null && attrMap.remove(attribute.getCategory()) != null; } /** ! * Returns {@code true} if this attribute set contains an attribute for the ! * specified category. * ! * @param category whose presence in this attribute set is to be tested ! * @return {@code true} if this attribute set contains an attribute value ! * for the specified category */ public boolean containsKey(Class<?> category) { return category != null && AttributeSetUtilities. verifyAttributeCategory(category, Attribute.class) != null && attrMap.get(category) != null; } /** ! * Returns {@code true} if this attribute set contains the given attribute. * ! * @param attribute value whose presence in this attribute set is to be ! * tested ! * @return {@code true} if this attribute set contains the given attribute ! * value */ public boolean containsValue(Attribute attribute) { return attribute != null && attribute instanceof Attribute && attribute.equals(attrMap.get(attribute.getCategory())); } /** ! * Adds all of the elements in the specified set to this attribute. The ! * outcome is the same as if the {@link #add(Attribute) add(Attribute)} ! * operation had been applied to this attribute set successively with each ! * element from the specified set. The behavior of the ! * {@code addAll(AttributeSet)} operation is unspecified if the specified ! * set is modified while the operation is in progress. ! * <p> ! * If the {@code addAll(AttributeSet)} operation throws an exception, the ! * effect on this attribute set's state is implementation dependent; ! * elements from the specified set before the point of the exception may or ! * may not have been added to this attribute set. * + * @param attributes whose elements are to be added to this attribute set * @return {@code true} if this attribute set changed as a result of the ! * call ! * @throws UnmodifiableSetException if this attribute set does not support ! * the {@code addAll(AttributeSet)} method ! * @throws NullPointerException if some element in the specified set is ! * {@code null}, or the set is {@code null} * @see #add(Attribute) */ public boolean addAll(AttributeSet attributes) { Attribute []attrs = attributes.toArray();
*** 426,491 **** } return result; } /** ! * Returns the number of attributes in this attribute set. If this ! * attribute set contains more than {@code Integer.MAX_VALUE} elements, ! * returns {@code Integer.MAX_VALUE}. * ! * @return The number of attributes in this attribute set. */ public int size() { return attrMap.size(); } /** * ! * @return the Attributes contained in this set as an array, zero length ! * if the AttributeSet is empty. */ public Attribute[] toArray() { Attribute []attrs = new Attribute[size()]; attrMap.values().toArray(attrs); return attrs; } - /** * Removes all attributes from this attribute set. * ! * @throws UnmodifiableSetException ! * (unchecked exception) Thrown if this attribute set does not support ! * the {@code clear()} operation. */ public void clear() { attrMap.clear(); } /** ! * Returns true if this attribute set contains no attributes. * ! * @return true if this attribute set contains no attributes. */ public boolean isEmpty() { return attrMap.isEmpty(); } /** * Compares the specified object with this attribute set for equality. ! * Returns {@code true} if the given object is also an attribute set and ! * the two attribute sets contain the same attribute category-attribute ! * value mappings. This ensures that the ! * {@code equals()} method works properly across different ! * implementations of the AttributeSet interface. ! * ! * @param object to be compared for equality with this attribute set. ! * ! * @return {@code true} if the specified object is equal to this ! * attribute set. */ - public boolean equals(Object object) { if (object == null || !(object instanceof AttributeSet)) { return false; } --- 382,443 ---- } return result; } /** ! * Returns the number of attributes in this attribute set. If this attribute ! * set contains more than {@code Integer.MAX_VALUE} elements, returns ! * {@code Integer.MAX_VALUE}. * ! * @return the number of attributes in this attribute set */ public int size() { return attrMap.size(); } /** + * Returns an array of the attributes contained in this set. * ! * @return the attributes contained in this set as an array, zero length if ! * the {@code AttributeSet} is empty */ public Attribute[] toArray() { Attribute []attrs = new Attribute[size()]; attrMap.values().toArray(attrs); return attrs; } /** * Removes all attributes from this attribute set. * ! * @throws UnmodifiableSetException if this attribute set does not support ! * the {@code clear()} operation */ public void clear() { attrMap.clear(); } /** ! * Returns {@code true} if this attribute set contains no attributes. * ! * @return {@code true} if this attribute set contains no attributes */ public boolean isEmpty() { return attrMap.isEmpty(); } /** * Compares the specified object with this attribute set for equality. ! * Returns {@code true} if the given object is also an attribute set and the ! * two attribute sets contain the same attribute category-attribute value ! * mappings. This ensures that the {@code equals()} method works properly ! * across different implementations of the {@code AttributeSet} interface. ! * ! * @param object to be compared for equality with this attribute set ! * @return {@code true} if the specified object is equal to this attribute ! * set */ public boolean equals(Object object) { if (object == null || !(object instanceof AttributeSet)) { return false; }
*** 502,526 **** } return true; } /** ! * Returns the hash code value for this attribute set. ! * The hash code of an attribute set is defined to be the sum ! * of the hash codes of each entry in the AttributeSet. ! * This ensures that {@code t1.equals(t2)} implies that ! * {@code t1.hashCode()==t2.hashCode()} for any two attribute sets * {@code t1} and {@code t2}, as required by the general contract of ! * {@link java.lang.Object#hashCode() Object.hashCode()}. * ! * @return The hash code value for this attribute set. */ public int hashCode() { int hcode = 0; Attribute[] attrs = toArray(); for (int i=0;i<attrs.length; i++) { hcode += attrs[i].hashCode(); } return hcode; } - } --- 454,476 ---- } return true; } /** ! * Returns the hash code value for this attribute set. The hash code of an ! * attribute set is defined to be the sum of the hash codes of each entry in ! * the {@code AttributeSet}. This ensures that {@code t1.equals(t2)} implies ! * that {@code t1.hashCode()==t2.hashCode()} for any two attribute sets * {@code t1} and {@code t2}, as required by the general contract of ! * {@link Object#hashCode() Object.hashCode()}. * ! * @return the hash code value for this attribute set */ public int hashCode() { int hcode = 0; Attribute[] attrs = toArray(); for (int i=0;i<attrs.length; i++) { hcode += attrs[i].hashCode(); } return hcode; } }
< prev index next >