[ 
https://issues.apache.org/jira/browse/LUCENENET-284?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nicholas Paldino updated LUCENENET-284:
---------------------------------------

    Attachment: ComparableListOfT.patch

I've gone over the items I've outlined above, and created a new class in 
SupportClass named ComparableList<T>.

This implements IComparable<IEnumerable<T>>, IComparable, as well as 
IEquatable<T>, along with the proper operator overloads to compare a sequence 
of this type against any IEnumerable<T> implementation.

It will also generate the hash code based on the contents of the list.  The one 
place this differs is that the hash code is primed with the hash code of the 
type of the type parameter T.  The reason for this is that a 
ComparableList<int> and a ComparableList<string>, both with zero elements will 
have the same hash code.  If you are storing a lot of empty ComparableList 
instances with different type parameters in something that uses a hashcode 
(say, in a Hashtable), then you will have a lot of hash conflicts, which is a 
bad idea.

I've also used the Comparer<T> class to perform comparisons, as it will handle 
implementations of IComparable and the like on T.

The patch also includes the files that would be impacted by this, with the 
ArrayList swapped out for the ComparableList<T>, which causes less code diffs.

> java vs .Net GetHashCode and Equals for ArrayList 
> --------------------------------------------------
>
>                 Key: LUCENENET-284
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-284
>             Project: Lucene.Net
>          Issue Type: Bug
>            Reporter: Andrei Iliev
>         Attachments: ArrayList.patch, ComparableListOfT.patch
>
>
> 1)In java the hash code of a list (and ArrayList) is defined to be the result 
> of the following calc:
> <code>
> hashCode = 1;
>   Iterator i = list.iterator();
>   while (i.hasNext()) {
>       Object obj = i.next();
>       hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
>   }
> </code>
> In .Net it hash code of object itself.
>  
> 2) In java two lists are defined to be equal if they contain the same 
> elements in the same order. 
> In .Net it compares the object references.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to