RFR 7065380 : Allow Collections.sort to sort Collections.singletonList() result
Jason Mehrens
jason_mehrens at hotmail.com
Thu Mar 1 21:35:37 UTC 2012
What about exception cases where the single element is not comparable? http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147
Consider the following:
=========
Object[] a = new Object[]{new Object()};
Arrays.sort(a);
List l = Arrays.asList(a); //Evil raw type
Collections.sort(l);
========
On JDK1.6u31, Arrays.sort passes but, Collections.sort fails with a class cast.
Per the method contracts, both Arrays.sort and Collections.sort should fail in non-comparable single element case. So for this patch, the length check be performed to prevent the element swap that causes the unsupported operation exception but not prevent the call to Arrays.sort. That way both methods always have the same type checking behavior.
Jason
> From: mike.duigou at oracle.com
> Subject: RFR 7065380 : Allow Collections.sort to sort Collections.singletonList() result
> Date: Thu, 1 Mar 2012 11:50:49 -0800
> To: core-libs-dev at openjdk.java.net
>
> Hello all;
>
> Currently Collections.sort() refuses to sort the lists which result from calling Collections.singletonList(). This makes some sense because the singleton lists are immutable but they are also alway sorted.
>
> This patch allows Collections.sort() to be used with empty and singleton lists of all types. A short circuit return is provided for lists of length 0 and 1 as they are already sorted.
>
> WEBREV: http://cr.openjdk.java.net/~mduigou/7065380/0/webrev/
>
> For the unit test ignore the diffs and view the "New" file--webrev doesn't understand "hg copy".
>
> Thanks,
>
> Mike
More information about the core-libs-dev
mailing list