On Aug 26, 2013, at 11:13 PM, Remi Forax <fo...@univ-mlv.fr> wrote:

> On 08/26/2013 10:10 PM, Paul Sandoz wrote:
>> On Aug 25, 2013, at 8:04 PM, Remi Forax <fo...@univ-mlv.fr> wrote:
>> 
>>> On 08/21/2013 02:25 PM, Paul Sandoz wrote:
>>>> Hi,
>>>> 
>>>> Here are Doug's Linked/HashMap changes, discussed in a previous thread, as 
>>>> a webrev:
>>>> 
>>>>   
>>>> http://cr.openjdk.java.net/~psandoz/tl/JDK-8023463-Linked-HashMap-bin-and-tree/webrev/
>>>> 
>>>> I also added some tests related to characteristics associated with fixing 
>>>> another bug.
>>>> 
>>>> Looking at the diffs will be tricky given there are so many changes.
>>> 
>>> The code can be simplified a little bit by using the diamond syntax,
>>> HashMap (lines: 919, 963, 1026, 1497, 1569) and
>>> LinkedHashMap (lines: 255, 264, 270, 278)
>>> 
>>> There are a bunch of @Override that are missing making the code harder than 
>>> it should to read.
>>> 
>> Yes, i think this is because it sticks to the 166 style i suspect. Easy to 
>> change.
>> 

Note that j.u. classes are quite inconsistent in this respect to using diamonds 
and @Overrides. My preference is to do a sweeping change to all such code. I 
wonder if an IDE can automate that?

 
>>> In putVal, line 654, the null check (e != null) makes the method hard to 
>>> read,
>>> at least I think a comment saying that it means that an existing node need 
>>> to be altered is needed.
>>> 
>> e.g.:
>> 
>>             if (e != null) { // existing mapping for key
> 
> Yes, perfect.
> 
>> 
>> 
>>> And I still don't like the way the method clone() is implemented (the older 
>>> implementation has the same issue),
>>> result should not be initialized to null and the catch clause should thow 
>>> an InternalError or an AssertionError,
>>> 
>> You mean like this:
>> 
>>     public Object clone() {
>>         HashMap<K,V> result = null;
>>         try {
>>             result = (HashMap<K,V>)super.clone();
>>         } catch (CloneNotSupportedException e) {
>>             // this shouldn't happen, since we are Cloneable
>>             throw new InternalError(e);
>>         }
>>         result.reinitialize();
>>         result.putMapEntries(this, false);
>>         return result;
>>     }
> 
> Yes, and in that case, you don't need to initialize result to null (the first 
> line), because when result is used
> (result.reinitialize()) result is already initialized by the return value of 
> super.clone().
> 

Thanks.

Here is the latest patch that also includes updates for the above 2 comments 
and Mike's comments:

  
http://cr.openjdk.java.net/~psandoz/tl/JDK-8023463-Linked-HashMap-bin-and-tree/webrev/

Paul.

Reply via email to