> On Apr 11, 2005, at 5:57 PM, Yonik Seeley wrote: > > Erik, why was the last change to BooleanQuery made? > > The comment was "Correct BooleanQuery.equals such that every clause is > > compared". > > > > It looks like Vector.equals() should have worked, and the new code is > > probably slower as it creates two new arrays. > > Vector.equals() compares the Vector object instances and is only true > if they are the same object - it does not compare the contents of the > Vector for equality at that level. Try it out with some test cases.
??? Did you try it out? (sorry, couldn't resist ;-) The javadoc for Vector.equals() says it does the right thing. Vector.equals() calls super.equals() which is AbstractList.equals() which also "does the right thing". As a sanity check, I did write a simple test and tested it on 1.4 and 1.5 (the only JVMs I currently have installed). It's included at the end. > Where in the .equals that I added are two arrays being created? this.getClauses() and other.getClauses() both create an array. > public boolean equals(Object o) { > if (!(o instanceof BooleanQuery)) > return false; > BooleanQuery other = (BooleanQuery)o; > return (this.getBoost() == other.getBoost()) > && Arrays.equals(this.getClauses(), other.getClauses()); > } > > It's especially risky on this list to use the word "probably" when > talking about speed. :) Is it really slower? Yeah, I know... esp with todays latest HotSpot JVMs. It was just an educated guess. > I'm more than happy to adjust the .equals method to something better; > do you have a specific improvement? Change it back to the original ;-) I really wasn't trying to nitpick or anything... I had noticed your comment about equals() and panicked a little since we really only want to use an official lucene release in production (and we need to hash on Query). -Yonik --------------------------- little test prog --------------------------- import java.util.Vector; public class vec { public static void main(String[] args) { Integer a = new Integer(5); Integer b = new Integer(5); Vector va = new Vector(); va.add(a); Vector vb = new Vector(); vb.add(b); System.out.println("should be false:" + (a==b) ); System.out.println("should be true:" + a.equals(b) ); System.out.println("should be true:" + va.equals(vb) ); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]