[ https://issues.apache.org/jira/browse/LANG-575?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12793560#action_12793560 ]
Anthony Whitford commented on LANG-575: --------------------------------------- Note that *EqualsBuilder* has the exact same issue. See: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang3/builder/EqualsBuilder.java?view=markup *reflectionAppend*, line 321: {code} List<String> excludedFieldList = excludeFields != null ? Arrays.asList(excludeFields) : Collections.<String>emptyList(); {code} And so does *CompareToBuilder*... See: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang3/builder/CompareToBuilder.java?view=markup *reflectionAppend*, line 356: {code} List<String> excludedFieldList = excludeFields != null ? Arrays.asList(excludeFields) : Collections.<String>emptyList(); {code} > HashCodeBuilder reflectionAppend creates unnecessary copy of excludeFields > -------------------------------------------------------------------------- > > Key: LANG-575 > URL: https://issues.apache.org/jira/browse/LANG-575 > Project: Commons Lang > Issue Type: Bug > Components: lang.builder.* > Affects Versions: 2.4 > Environment: Sun Java JDK 1.6.0_17 > Reporter: Anthony Whitford > > See > http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/java/org/apache/commons/lang3/builder/HashCodeBuilder.java?view=markup > Please review the implementation for *reflectionAppend* (lines 174 to 202)... > Specifically, see line 182: > {code} > List<String> excludedFieldList = excludeFields != null ? > Arrays.asList(excludeFields) : Collections.<String>emptyList(); > {code} > Note that if you are in the habit of passing in a String array for excluding > fields ({{String[] excludeFields}}) -- which is a best practice when using > Hibernate (to skip primary keys ({...@id}}) and version fields > ({...@version}}) that change upon persistence) -- _EVERY TIME_ the _hashCode_ > is calculated, an _ArrayList_ is being created -- generating fodder for the > garbage collector. > I thought I might get around this by passing a {{Collection<String>}} instead > of a {{String[]}}, but ironically the implementation of the > {{reflectionHashCode(Object object, Collection<String> excludeFields)}} (see > lines 475 to 477), for example, transforms the {{Collection<String>}} into a > {{String[]}} only to have it transformed internally into a temporary > {{ArrayList<String>}}. > I would expect the implementation to use and read what is submitted, whether > that is a {{String[]}} or a {{Collection<String>}}. I don't think it needs > to create another copy just to have a convenient {{contains}} method. > Efficiency is important, especially in the event of rehashing. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.