From b35394fa2a8a7533b062e8a040a25dc408281599 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 15 Jun 2016 01:40:39 +0200 Subject: [PATCH] Add QName.hashCode() cache QName is usually involved in hash-based lookups, hence it is useful to reuse a computed hash code so that constants do not spend cycles on computing it more than once. Add a field which will be lazily initiated to contain the result of hashCode(). This has no impact on memory footprint. Change-Id: I8a0b89599ed1029e2c572535826c52b4b837e265 Signed-off-by: Robert Varga --- .../opendaylight/yangtools/yang/common/QName.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java index 97a9aaab1a..06dc6e605d 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java @@ -61,10 +61,11 @@ public final class QName implements Immutable, Serializable, Comparable { private static final Pattern QNAME_PATTERN_NO_NAMESPACE_NO_REVISION = Pattern.compile("^(.+)$"); private static final char[] ILLEGAL_CHARACTERS = new char[] { '?', '(', ')', '&' }; - // Mandatory + // Non-null private final QNameModule module; - // Mandatory + // Non-null private final String localName; + private transient int hash; private QName(final QNameModule module, final String localName) { this.localName = checkLocalName(localName); @@ -177,11 +178,10 @@ public final class QName implements Immutable, Serializable, Comparable { @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Objects.hashCode(localName); - result = prime * result + module.hashCode(); - return result; + if (hash == 0) { + hash = Objects.hash(module, localName); + } + return hash; } /** -- 2.36.6