Could we update the Iterator, so it supports manipulation on the Collection
itself, and not throw UnsupportedOperationException during the time of
iteration?
On Sep 12, 2016 9:29 AM, <core-libs-dev-requ...@openjdk.java.net> wrote:

Send core-libs-dev mailing list submissions to
        core-libs-dev@openjdk.java.net

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.openjdk.java.net/mailman/listinfo/core-libs-dev
or, via email, send a message with subject or body 'help' to
        core-libs-dev-requ...@openjdk.java.net

You can reach the person managing the list at
        core-libs-dev-ow...@openjdk.java.net

When replying, please edit your Subject line so it is more specific
than "Re: Contents of core-libs-dev digest..."


Today's Topics:

   1. Re: Make iterators cloneable? (Peter Levart)
   2. Re: [PATCH] JDK-8134373: explore potential uses of
      convenience       factories within the JDK (David Holmes)
   3. Re: Make iterators cloneable? (Tagir Valeev)
   4. Re: Make iterators cloneable? (Tagir Valeev)
   5. JDK 9 RFR of JDK-8165818: Remove
      tools/pack200/Pack200Props.java from      ProblemList (Amy Lu)
   6. Re: JDK 9 RFR of JDK-8165818: Remove
      tools/pack200/Pack200Props.java   from ProblemList (Amy Lu)


----------------------------------------------------------------------

Message: 1
Date: Sun, 11 Sep 2016 23:42:29 +0200
From: Peter Levart <peter.lev...@gmail.com>
To: Dave Brosius <dbros...@mebigfatguy.com>,    "Tagir F. Valeev"
        <amae...@gmail.com>, core-libs-dev@openjdk.java.net
Subject: Re: Make iterators cloneable?
Message-ID: <06efbb04-e97b-18b7-a1fe-5fa010811...@gmail.com>
Content-Type: text/plain; charset=windows-1252; format=flowed

I would say the algorithm is O(n), when you take n to be the number of
emitted pairs, wouldn't you ;-)

You wanted an algorithm that emits n*(n-1) / 2 distinct pairs of
elements from a set of n elements, didn't you?

Regards, Peter


On 09/11/2016 06:55 PM, Dave Brosius wrote:
> Sure, but both of those algorithms are n^2, which is a bit painful,
> especially given all the pointer chasing that occurs with iterators.
>
>
> On 09/11/2016 08:20 AM, Peter Levart wrote:
>> Hi,
>>
>> Even if the elements are not comparable, you could rely on the fact
>> that Collection(s) usually create iterators with stable iteration
>> order, so you could do the following:
>>
>>
>>         Set<Integer> set = Set.of(1, 2, 3, 4);
>>
>>         Iterator<Integer> it1 = set.iterator();
>>         for (int n1 = 0; it1.hasNext(); n1++) {
>>             Integer e1 = it1.next();
>>             Iterator<Integer> it2 = set.iterator();
>>             for (int n2 = 0; n2 < n1; n2++) {
>>                 Integer e2 = it2.next();
>>                 System.out.println(e1 + " <-> " + e2);
>>             }
>>         }
>>
>>
>> Regards, Peter
>>
>> On 09/11/2016 02:02 PM, Tagir F. Valeev wrote:
>>> Hello!
>>>
>>> As your keys are comparable, you can create normal iterators and
>>> filter the results like this:
>>>
>>> for(String v1 : s) {
>>>    for(String v2 : s) {
>>>      if(v1.compareTo(v2) < 0) {
>>>        System.out.println(v1 + " <-->" + v2);
>>>      }
>>>    }
>>> }
>>>
>>> Or using Stream API:
>>>
>>> s.stream().flatMap(v1 -> s.stream()
>>>      .filter(v2 -> v1.compareTo(v2) < 0).map(v2 -> v1 + " <-->" + v2))
>>>   .forEach(System.out::println);
>>>
>>> With best regards,
>>> Tagir Valeev.
>>>
>>>
>>> DB> It would be nice to be able to associate each element in a
>>> collection
>>> DB> with another element in the collection, which is something very
>>> easily
>>> DB> done with index based collections, but with sets, etc this isn't so
>>> DB> easy... unless i'm having a brainfart.
>>>
>>> DB> So i'd like to do this, but Iterator doesn't implement
>>> Cloneable... Any
>>> DB> reason not to? or is there another way that's missing me?
>>>
>>> DB> public class ItClone {
>>>
>>> DB>      public static void main(String[] args) {
>>> DB>          Set<String> s = Collections.newSetFromMap(new
>>> DB> ConcurrentHashMap<String, Boolean>());
>>>
>>> DB>          s.add("Fee");
>>> DB>          s.add("Fi");
>>> DB>          s.add("Fo");
>>> DB>          s.add("Fum");
>>>
>>> DB>          Iterator<String> it1 = s.iterator();
>>> DB>          while (it1.hasNext()) {
>>> DB>              String v1 = it1.next();
>>>
>>> DB>              Iterator<String> it2 = (Iterator<String>)
>>> it1.*clone*();
>>> DB>              while (it2.hasNext()) {
>>> DB>                  String v2 = it2.next();
>>>
>>> DB>                  System.out.println(v1 + " <-->" + v2);
>>> DB>              }
>>> DB>          }
>>> DB>      }
>>> DB> }
>>>
>>
>



------------------------------

Message: 2
Date: Mon, 12 Sep 2016 10:50:49 +1000
From: David Holmes <david.hol...@oracle.com>
To: Jonathan Bluett-Duncan <jbluettdun...@gmail.com>,
        core-libs-dev@openjdk.java.net
Subject: Re: [PATCH] JDK-8134373: explore potential uses of
        convenience     factories within the JDK
Message-ID: <100bf463-ca7d-f0fd-dc6e-4433b5e48...@oracle.com>
Content-Type: text/plain; charset=utf-8; format=flowed

Hi Jonathon,

Attachments get stripped from most of the mailing lists so you will need
to find someone to host these for you on cr.openjdk.java.net.

That aside you may be hard pressed to find anyone who can look at this
future work now, given where things are with the JDK 9 release schedule.

Cheers,
David

On 11/09/2016 9:42 AM, Jonathan Bluett-Duncan wrote:
> Hi all,
>
> Would you kindly review this patch to replace existing uses of
> Collections.unmodifiable*(*Arrays.asList(*)) and plain Arrays.asList(*)
> with (List|Set|Map).of(*). You may find the patch files in the
attachments.
>
> My rationale for replacing uses of Collections.unmodifiable*... with
> (List|Set|Map).of is to make use of the memory savings allowed by the
newer
> APIs.
>
> The general rationale for replacing the Arrays.asList calls I've touched
is
> to again make use of memory savings, but this may be naive or misguided
> reasoning on my part, as Arrays.asList may or may not be more
> memory-efficient than List.of. However, where I've replaced Arrays.asList
> for List.of in FileTreeIterator, my reasoning for doing so instead was to
> help prevent TOCTOU attacks, but again this may be misguided on my part.
>
> It doesn't seem practical to me to include new unit tests, as these are
> mainly performance improvements, but if it's believed that new unit tests
> are needed, then I'd be happy to go back and try to include some.
>
> Kind regards,
> Jonathan
>


------------------------------

Message: 3
Date: Mon, 12 Sep 2016 07:51:59 +0700
From: Tagir Valeev <amae...@gmail.com>
To: Peter Levart <peter.lev...@gmail.com>
Cc: core-libs-dev <core-libs-dev@openjdk.java.net>
Subject: Re: Make iterators cloneable?
Message-ID:
        <cae+3fjzzqie5xo_a342ndevsirdraknm06rgyvhjrxx0pay...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

Hello, Peter!

I thought about numbering, but original Dave's code involved concurrent
set, so I presume that it's expected to be modified from other threads. In
this case my algorithm would output some legal pairs (probably reflecting
changes or not or reflecting only partially) while your algorithm can
output garbage (pair with equal e1, e2 or two pairs like e1 <-> e2, e2 <->
e1 or can even die with NoSuchElementException). Not sure what is better in
author's case.

Tagir.

On Sun, Sep 11, 2016 at 7:20 PM, Peter Levart <peter.lev...@gmail.com>
wrote:

> Hi,
>
> Even if the elements are not comparable, you could rely on the fact that
> Collection(s) usually create iterators with stable iteration order, so you
> could do the following:
>
>
>         Set<Integer> set = Set.of(1, 2, 3, 4);
>
>         Iterator<Integer> it1 = set.iterator();
>         for (int n1 = 0; it1.hasNext(); n1++) {
>             Integer e1 = it1.next();
>             Iterator<Integer> it2 = set.iterator();
>             for (int n2 = 0; n2 < n1; n2++) {
>                 Integer e2 = it2.next();
>                 System.out.println(e1 + " <-> " + e2);
>             }
>         }
>
>
> Regards, Peter
>
>
> On 09/11/2016 02:02 PM, Tagir F. Valeev wrote:
>
> Hello!
>
> As your keys are comparable, you can create normal iterators and
> filter the results like this:
>
> for(String v1 : s) {
>   for(String v2 : s) {
>     if(v1.compareTo(v2) < 0) {
>       System.out.println(v1 + " <-->" + v2);
>     }
>   }
> }
>
> Or using Stream API:
>
> s.stream().flatMap(v1 -> s.stream()
>     .filter(v2 -> v1.compareTo(v2) < 0).map(v2 -> v1 + " <-->" + v2))
>  .forEach(System.out::println);
>
> With best regards,
> Tagir Valeev.
>
>
> DB> It would be nice to be able to associate each element in a collection
> DB> with another element in the collection, which is something very easily
> DB> done with index based collections, but with sets, etc this isn't so
> DB> easy... unless i'm having a brainfart.
>
> DB> So i'd like to do this, but Iterator doesn't implement Cloneable...
Any
> DB> reason not to? or is there another way that's missing me?
>
> DB> public class ItClone {
>
> DB>      public static void main(String[] args) {
> DB>          Set<String> s = Collections.newSetFromMap(new
> DB> ConcurrentHashMap<String, Boolean>());
>
> DB>          s.add("Fee");
> DB>          s.add("Fi");
> DB>          s.add("Fo");
> DB>          s.add("Fum");
>
> DB>          Iterator<String> it1 = s.iterator();
> DB>          while (it1.hasNext()) {
> DB>              String v1 = it1.next();
>
> DB>              Iterator<String> it2 = (Iterator<String>) it1.*clone*();
> DB>              while (it2.hasNext()) {
> DB>                  String v2 = it2.next();
>
> DB>                  System.out.println(v1 + " <-->" + v2);
> DB>              }
> DB>          }
> DB>      }
> DB> }
>
>
>
>


------------------------------

Message: 4
Date: Mon, 12 Sep 2016 07:58:27 +0700
From: Tagir Valeev <amae...@gmail.com>
To: Peter Levart <peter.lev...@gmail.com>
Cc: core-libs-dev <core-libs-dev@openjdk.java.net>
Subject: Re: Make iterators cloneable?
Message-ID:
        <CAE+3fjazR0=Wtwgj98nnTGaq03S+8pPF=psoc3qu7metdfr...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

Actually given the fact that we're iterating the Set (so the elements are
unique) and using the assumption that iteration of the same set is stable,
you can avoid numbering like this:

for(String e1 : set) {
  for(String e2 : set) {
    if(e1 == e2) break;
    System.out.println(e1+" <-> "+e2);
  }
}

Again, such algorithm is fragile to concurrent changes.

With best regards,
Tagir Valeev.

On Mon, Sep 12, 2016 at 7:51 AM, Tagir Valeev <amae...@gmail.com> wrote:

> Hello, Peter!
>
> I thought about numbering, but original Dave's code involved concurrent
> set, so I presume that it's expected to be modified from other threads. In
> this case my algorithm would output some legal pairs (probably reflecting
> changes or not or reflecting only partially) while your algorithm can
> output garbage (pair with equal e1, e2 or two pairs like e1 <-> e2, e2 <->
> e1 or can even die with NoSuchElementException). Not sure what is better
in
> author's case.
>
> Tagir.
>
> On Sun, Sep 11, 2016 at 7:20 PM, Peter Levart <peter.lev...@gmail.com>
> wrote:
>
>> Hi,
>>
>> Even if the elements are not comparable, you could rely on the fact that
>> Collection(s) usually create iterators with stable iteration order, so
you
>> could do the following:
>>
>>
>>         Set<Integer> set = Set.of(1, 2, 3, 4);
>>
>>         Iterator<Integer> it1 = set.iterator();
>>         for (int n1 = 0; it1.hasNext(); n1++) {
>>             Integer e1 = it1.next();
>>             Iterator<Integer> it2 = set.iterator();
>>             for (int n2 = 0; n2 < n1; n2++) {
>>                 Integer e2 = it2.next();
>>                 System.out.println(e1 + " <-> " + e2);
>>             }
>>         }
>>
>>
>> Regards, Peter
>>
>>
>> On 09/11/2016 02:02 PM, Tagir F. Valeev wrote:
>>
>> Hello!
>>
>> As your keys are comparable, you can create normal iterators and
>> filter the results like this:
>>
>> for(String v1 : s) {
>>   for(String v2 : s) {
>>     if(v1.compareTo(v2) < 0) {
>>       System.out.println(v1 + " <-->" + v2);
>>     }
>>   }
>> }
>>
>> Or using Stream API:
>>
>> s.stream().flatMap(v1 -> s.stream()
>>     .filter(v2 -> v1.compareTo(v2) < 0).map(v2 -> v1 + " <-->" + v2))
>>  .forEach(System.out::println);
>>
>> With best regards,
>> Tagir Valeev.
>>
>>
>> DB> It would be nice to be able to associate each element in a collection
>> DB> with another element in the collection, which is something very
easily
>> DB> done with index based collections, but with sets, etc this isn't so
>> DB> easy... unless i'm having a brainfart.
>>
>> DB> So i'd like to do this, but Iterator doesn't implement Cloneable...
Any
>> DB> reason not to? or is there another way that's missing me?
>>
>> DB> public class ItClone {
>>
>> DB>      public static void main(String[] args) {
>> DB>          Set<String> s = Collections.newSetFromMap(new
>> DB> ConcurrentHashMap<String, Boolean>());
>>
>> DB>          s.add("Fee");
>> DB>          s.add("Fi");
>> DB>          s.add("Fo");
>> DB>          s.add("Fum");
>>
>> DB>          Iterator<String> it1 = s.iterator();
>> DB>          while (it1.hasNext()) {
>> DB>              String v1 = it1.next();
>>
>> DB>              Iterator<String> it2 = (Iterator<String>) it1.*clone*();
>> DB>              while (it2.hasNext()) {
>> DB>                  String v2 = it2.next();
>>
>> DB>                  System.out.println(v1 + " <-->" + v2);
>> DB>              }
>> DB>          }
>> DB>      }
>> DB> }
>>
>>
>>
>>
>


------------------------------

Message: 5
Date: Mon, 12 Sep 2016 11:38:32 +0800
From: Amy Lu <amy...@oracle.com>
To: Core-Libs-Dev <core-libs-dev@openjdk.java.net>,     Kumar Srinivasan
        <kumar.x.sriniva...@oracle.com>
Subject: JDK 9 RFR of JDK-8165818: Remove
        tools/pack200/Pack200Props.java from    ProblemList
Message-ID: <7498b951-367f-29e6-319f-f91ab2c23...@oracle.com>
Content-Type: text/plain; charset=utf-8; format=flowed

tools/pack200/Pack200Props.java

This test was put into ProblemList.txt in 9/117 due to test timed out
issue: JDK-8155857.

Test failure (timed out) is reproducible with 9/117 and 9/118, but issue
gone in 9/119 and *not* reproducible anymore since 9/119. Issue must has
been resolved with other fixes.

Tested with the very latest build on all platforms, test pass.
Standalone run test in loop for 500 times, test all pass.

As issue does not exist anymore, test could be removed from ProblemList.txt

bug: https://bugs.openjdk.java.net/browse/JDK-8165818

Thanks,
Amy


--- old/test/ProblemList.txt    2016-09-12 11:28:05.000000000 +0800
+++ new/test/ProblemList.txt    2016-09-12 11:28:05.000000000 +0800
@@ -1,4 +1,4 @@
-###########################################################################
+e##########################################################################
  #
  # Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights
reserved.
  # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -312,8 +312,6 @@

  tools/launcher/FXLauncherTest.java                              8068049
linux-all,macosx-all

-tools/pack200/Pack200Props.java                                 8155857
generic-all
-
  tools/launcher/VersionCheck.java                                8165772
generic-all

  ############################################################
################




------------------------------

Message: 6
Date: Mon, 12 Sep 2016 11:58:33 +0800
From: Amy Lu <amy...@oracle.com>
To: Core-Libs-Dev <core-libs-dev@openjdk.java.net>,     Kumar Srinivasan
        <kumar.x.sriniva...@oracle.com>
Subject: Re: JDK 9 RFR of JDK-8165818: Remove
        tools/pack200/Pack200Props.java from ProblemList
Message-ID: <bc42fde1-24d6-7758-014e-1dbb7ab04...@oracle.com>
Content-Type: text/plain; charset=utf-8; format=flowed

On 9/12/16 11:38 AM, Amy Lu wrote:
> tools/pack200/Pack200Props.java
>
> This test was put into ProblemList.txt in 9/117 due to test timed out
> issue: JDK-8155857.
>
> Test failure (timed out) is reproducible with 9/117 and 9/118, but
> issue gone in 9/119 and *not* reproducible anymore since 9/119. Issue
> must has been resolved with other fixes.
>
> Tested with the very latest build on all platforms, test pass.
> Standalone run test in loop for 500 times, test all pass.
>
> As issue does not exist anymore, test could be removed from
> ProblemList.txt
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8165818
>
> Thanks,
> Amy
>
Sorry, the patch: http://cr.openjdk.java.net/~amlu/8165818/webrev.00/

--- old/test/ProblemList.txt    2016-09-12 11:55:51.000000000 +0800
+++ new/test/ProblemList.txt    2016-09-12 11:55:51.000000000 +0800
@@ -312,8 +312,6 @@

  tools/launcher/FXLauncherTest.java 8068049 linux-all,macosx-all

-tools/pack200/Pack200Props.java 8155857 generic-all
-
  tools/launcher/VersionCheck.java 8165772 generic-all

  ############################################################
################



End of core-libs-dev Digest, Vol 113, Issue 35
**********************************************

Reply via email to