mrglavas 2005/03/14 15:09:35
Modified: java/src/org/apache/xerces/util SymbolTable.java
Log:
Improve performance of SymbolTable.addSymbol(String). In many instances the
strings
we pass into this method are already internalized. In such cases calling
String.hashCode()
will yield better performance than calculating a hash code ourselves. Updated
hash(char[], int, int)
so that it will yield the same result as String.hashCode().
Revision Changes Path
1.10 +7 -20
xml-xerces/java/src/org/apache/xerces/util/SymbolTable.java
Index: SymbolTable.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/util/SymbolTable.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- SymbolTable.java 30 Jul 2004 22:10:54 -0000 1.9
+++ SymbolTable.java 14 Mar 2005 23:09:35 -0000 1.10
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2002,2004 The Apache Software Foundation.
+ * Copyright 2000-2002,2004,2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -174,14 +174,8 @@
// search for identical symbol
int bucket = hash(symbol) % fTableSize;
- int length = symbol.length();
- OUTER: for (Entry entry = fBuckets[bucket]; entry != null; entry =
entry.next) {
- if (length == entry.characters.length) {
- for (int i = 0; i < length; i++) {
- if (symbol.charAt(i) != entry.characters[i]) {
- continue OUTER;
- }
- }
+ for (Entry entry = fBuckets[bucket]; entry != null; entry =
entry.next) {
+ if (entry.symbol.equals(symbol)) {
return entry.symbol;
}
}
@@ -248,14 +242,7 @@
* @param symbol The symbol to hash.
*/
public int hash(String symbol) {
-
- int code = 0;
- int length = symbol.length();
- for (int i = 0; i < length; i++) {
- code = code * 37 + symbol.charAt(i);
- }
- return code & 0x7FFFFFF;
-
+ return symbol.hashCode() & 0x7FFFFFF;
} // hash(String):int
/**
@@ -272,8 +259,8 @@
public int hash(char[] buffer, int offset, int length) {
int code = 0;
- for (int i = 0; i < length; i++) {
- code = code * 37 + buffer[offset + i];
+ for (int i = 0; i < length; ++i) {
+ code = code * 31 + buffer[offset + i];
}
return code & 0x7FFFFFF;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]