<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2650.12">
<TITLE>PartialList.remove(int)</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2 FACE="Arial">Noticed something which may be of interest.&nbsp; I'm sure it's already been noted but from a search of your mailing archives I didn't find any references to it.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">AbstractList.indexOf(Object) returns a matching list index based on the first successful Object.equals() comparison.&nbsp; Therefore if you've got a list with the same string in it more than once (i.e. different String object instances but containing the same string - not multiple list entries to the same object reference) you can run into a problem with the integrity of your PartialList/backingList relationship.&nbsp; In the case of PartialList.remove(int), if you attempt to remove e.g. the 2nd string from the list you end up removing the 2nd from the PartialList (OK) but the 1st in the backingList (not OK).&nbsp; In the case of PartialList.remove(Object) I guess things will get screwed also.&nbsp; I've seen this happen in practice with the JDOM - it's not something I'm predicting will happen.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; public Object remove(int index) {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object o = super.remove(index);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backingList.remove(o);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (o instanceof Element) {</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Element)o).setParent(null);</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return o;</FONT>
<BR><FONT SIZE=2 FACE="Arial">&nbsp;&nbsp;&nbsp; }</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Of course in theory it's not going to happen with just Strings - any Object who's equals() method performs more than a simple reference comparison.&nbsp; I've only seen it with String objects.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">Obviously this could be sorted by overriding indexOf in PartialList to only perform a reference comparison with some similar work around for getting the proper index within the backingList but you mightn't want to do that because of the possible side effects.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">Cheers.</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Tom.</FONT>
</P>

</BODY>
</HTML>