Regarding why you didn't choose a straight vararg solution, I prefer you do
allow any number of key/values as long as you throw an exception if the
array is not an even sized.


Cheers,
Paul


On Wed, Jul 16, 2014 at 8:58 PM, Stuart Marks <stuart.ma...@oracle.com>
wrote:

> On 7/16/14 6:03 PM, Remi Forax wrote:
>
>> On 07/17/2014 02:46 AM, Stuart Marks wrote:
>>
>>> Please review this draft JEP for Convenience Factory Methods for
>>> Collections:
>>>
>>>     https://bugs.openjdk.java.net/browse/JDK-8048330
>>>
>>> Brief background: several times over the years there have been proposals
>>> to
>>> add "collection literals" to the language. The most recent round of this
>>> was
>>> in regard to JEP 186, a research JEP to explore this topic. That effort
>>> was
>>> concluded by Brian Goetz, as summarized in this email:
>>>
>>> http://mail.openjdk.java.net/pipermail/lambda-dev/2014-March/011938.html
>>>
>>> Essentially, the idea of adding collection literals to the language was
>>> set
>>> aside in favor of adding some library APIs, not entirely unlike
>>> collection
>>> literals, that make it more convenient to create collections. That's
>>> what this
>>> proposal is.
>>>
>>
>> I think you should say something about the serialization of the immutable
>> collections
>> because implementation details like the real class name can leak through
>> this
>> channel.
>> That's why, by example, java.util.Collections.ArrayList (the internal
>> class of
>> Collections) was never renamed.
>>
>
> Hi Remi,
>
> (I think you mean java.util.Arrays.ArrayList?)
>
> But yes, the point is make the implementation classes private and to use
> serialization proxies (or perhaps just one serialization proxy for all
> implementation classes) to control the number of classes exposed by the
> serialized format. I should probably make this more explicit.
>
>  Also 5 key/value pairs seems a little bit limited IMO, 7 or 8 will be
>> better but
>> I suppose you want to use the fact
>> that because the number of pairs is really small, the algorithm can do a
>> linear
>> probe.
>>
>
> We started with 5 because that's what Guava does, but there's nothing
> essential about 5. Could be 6 or 7 or maybe even 8. We need to do some
> investigation of common map sizes in real applications. That's how the
> Guava guys came up with 5, I think. We have some internal numbers that I'm
> told are slightly higher, but I still need to track those down.
>
> And yes at small sizes it makes sense to do linear probe or even a plain
> linear search (i.e., no hashing).
>
>  I think you should add a version that takes two arrays of the same size
>> (for an
>> (almost) unlimited number of pairs)
>> with an implementation that clone the two arrays (at least until value
>> type are
>> implemented).
>>
>
> Yes, one could add such a thing. :-) I guess if we were to choose the
> right number of key/value pairs for Map.of(...), would there still be a
> need for immutable maps with arbitrary numbers of key-value pairs? And how
> convenient would it be to use?
>
>  I think you should also add a default method toImmutable to Set, List and
>> Map,
>> so one  can use HashSet, ArrayList
>> and HashMap as builder for their immutable counterparts. Otherwise, the
>> stream
>> integration will be difficult,
>> i.e. the implementation of Collectors.toImmutableList/Set/Map.
>>
>
> I don't see this proposal as providing immutable counterparts to the
> existing mutable collections. The existing collections are designed to deal
> well with arbitrary numbers of elements, but the immutable collections
> discussed here are not -- they're intended to support the convenience API,
> which is focused on relatively small numbers of elements.
>
> Now it might be nice to have a set of scalable, immutable collections,
> which would necessarily entail some additional APIs to construct them from
> streams and from existing collections. But that's a somewhat different
> goal. We should have a discussion about whether doing that is necessary,
> and if so, whether it should be part of this proposal.
>
> s'marks
>
>
>

Reply via email to