Java 8 added a neat shortcut for that, too:
http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#newKeySet--

On 12 January 2016 at 17:06, Swor, Steve <[email protected]>
wrote:

> eep... I always forget that there's no ConcurrentHashSet. However you
> can get one via Collections.newSetFromMap(new ConcurrentHashMap())
> On 13/01/16 10:04, Swor, Steve wrote:
> > My thoughts based on the conversation so far:
> >
> > 1. How important is it to expose the duplicates/ordering semantics in
> the public API? My preference is to keep it as loose/flexible as possible
> (e.g. use Collection unless there is a specific reason to narrow it further
> in the public API).
> >
> > As far as choosing the implementation, I've come up with a brief
> decision tree which should (hopefully) help.
> >
> > Must prevent duplicates?
> > No:
> > ......Must be thread-safe?
> > ......Yes: use CopyOnWriteArrayList
> > ......No: use ArrayList
> > Yes:
> > ......Must be thread-safe?
> > ......No:
> > ............Must be ordered?
> > ............No: use HashSet
> > ............Yes:
> > ..................Must preserve the order in which objects were added?
> > ..................No: use TreeSet
> > ..................Yes: use LinkedHashSet
> > ....Yes:
> > ...........Must be ordered?
> > ...........No: use ConcurrentHashSet
> > ...........Yes:
> > .................Must preserve the order in which objects were added?
> > .................No: use ConcurrentSkipListSet
> > .................Yes: use CopyOnWriteArraySet
> >
> > Cheers,
> > Steve
> >
> >
> > On 13/01/16 07:03, Matt Sicker wrote:
> > What about NavigableSet? ;)
> >
> > On 12 January 2016 at 13:57, Gary Gregory <[email protected]
> <mailto:[email protected]>> wrote:
> > For completeness' sake: A set can also be ordered:
> https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html
> >
> > Gary
> >
> > On Tue, Jan 12, 2016 at 4:09 AM, Mikael Ståldal <<mailto:
> [email protected]>[email protected]<mailto:
> [email protected]>> wrote:
> > List is a Collection with the additional semantics of being ordered. Set
> is a Collection with the additional semantics of having no duplicates.
> >
> > So is the order of the plugins significant? If not it should be
> Collection or Iterable (or possibly Set) rather than List. If the order is
> significant, we should keep it as List.
> >
> > On Tue, Jan 12, 2016 at 12:59 PM, Mikael Ståldal <
> [email protected]<mailto:[email protected]>> wrote:
> > If you want it more generic, it should be Iterable rather than Iterator.
> >
> > On Tue, Jan 12, 2016 at 6:34 AM, sampath kumar <<mailto:
> [email protected]>[email protected]<mailto:[email protected]>>
> wrote:
> > You Can still achieve enhanced for loop using iterator by using
> following modification.
> >
> > I apologize if this thread going in different context. We can go with
> either List or Set depending on the Requirement.
> >
> > Code Snippet:
> >
> > import java.util.HashSet;
> > import java.util.Iterator;
> > import java.util.Set;
> >
> > public class PluginIterator implements Iterable<PluginIterator.Plugin> {
> >
> >   static class Plugin {
> >     String name;
> >     Plugin(String name) {
> >       this.name<http://this.name> = name;
> >     }
> >     public String toString() {
> >       return "Plugin{" + name + "}";
> >     }
> >   }
> >
> >   Set<Plugin> set = new HashSet<Plugin>();
> >
> >   public void addPenguin(Plugin p) {
> >     set.add(p);
> >   }
> >
> >   public Iterator<Plugin> getPlugins() {
> >     return set.iterator();
> >   }
> >
> >   public Iterator<Plugin> iterator() {
> >     return getPlugins();
> >   }
> >
> >   public static void main(String args[]) {
> > PluginIterator pluginIterators = new PluginIterator();
> > Plugin plugin1 = new Plugin("Plugin-1");
> > Plugin plugin2 = new Plugin("Plugin-2");
> > Plugin plugin3 = new Plugin("Plugin-3");
> > Plugin plugin4 = new Plugin("Plugin-4");
> > pluginIterators.addPenguin(plugin1);
> > pluginIterators.addPenguin(plugin2);
> > pluginIterators.addPenguin(plugin3);
> > pluginIterators.addPenguin(plugin4);
> >     for (Plugin p : pluginIterators) {
> >       System.out.println(p);
> >     }
> >   }
> > }
> >
> > On Tue, Jan 12, 2016 at 10:24 AM, Gary Gregory <<mailto:
> [email protected]>[email protected]<mailto:
> [email protected]>> wrote:
> > I dislike this iterator business very much, and you can't use it in a
> for each loop.
> >
> > Gary
> >
> > On Mon, Jan 11, 2016 at 8:46 PM, sampath kumar <<mailto:
> [email protected]>[email protected]<mailto:[email protected]>>
> wrote:
> > How about this, Unmodifiable Iterator
> >
> > Iterator<String> getPluginPackages();
> >
> > On Tue, Jan 12, 2016 at 9:50 AM, Gary Gregory <<mailto:
> [email protected]>[email protected]<mailto:
> [email protected]>> wrote:
> > List<String> getPluginPackages();
> >
> > G
> >
> > On Mon, Jan 11, 2016 at 8:12 PM, Paul Benedict <<mailto:
> [email protected]>[email protected]<mailto:[email protected]>>
> wrote:
> >
> > Thu can only use Set if you have a notion of equality and comparison. Do
> you for this collection?
> >
> > On Jan 11, 2016 9:48 PM, "Gary Gregory" <<mailto:[email protected]>
> [email protected]<mailto:[email protected]>> wrote:
> > Well, not really, I'd like to express whether the collection allows for
> duplicates or not, if not, use a set.
> >
> > Gary
> >
> > On Mon, Jan 11, 2016 at 7:08 PM, Matt Sicker <<mailto:[email protected]>
> [email protected]<mailto:[email protected]>> wrote:
> > Even a Collection works well for this.
> >
> >
> > On Monday, 11 January 2016, Gary Gregory <<mailto:[email protected]
> >[email protected]<mailto:[email protected]>> wrote:
> > On Mon, Jan 11, 2016 at 5:19 PM, Ralph Goers <[email protected]
> <mailto:[email protected]>> wrote:
> > It is returning a List already.  Does it really matter much?
> >
> > It is not indeed critical. It's just a finer point of declaring the
> intention of the data model, either duplicates are allowed and expected, or
> not.
> >
> > Gary
> >
> > Ralph
> >
> > On Jan 11, 2016, at 6:04 PM, Gary Gregory <[email protected]
> <mailto:[email protected]>> wrote:
> >
> > Should APIs like:
> >
> > org.apache.logging.log4j.core.config.Configuration.getPluginPackages()
> >
> > really return a List instead of a Set?
> >
> > Gary
> >
> > --
> > E-Mail: [email protected]<mailto:[email protected]> |
> [email protected]<mailto:[email protected]>
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition<http://www.manning.com/tahchiev/>
> > Spring Batch in Action<http://www.manning.com/templier/>
> > Blog: <http://garygregory.wordpress.com/>
> http://garygregory.wordpress.com
> > Home: <http://garygregory.com/> http://garygregory.com/
> > Tweet! <http://twitter.com/GaryGregory> http://twitter.com/GaryGregory
> >
> >
> >
> >
> > --
> > E-Mail: [email protected]<mailto:[email protected]> |
> [email protected]<mailto:[email protected]>
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition<http://www.manning.com/tahchiev/>
> > Spring Batch in Action<http://www.manning.com/templier/>
> > Blog: <http://garygregory.wordpress.com/>
> http://garygregory.wordpress.com
> > Home: <http://garygregory.com/> http://garygregory.com/
> > Tweet! <http://twitter.com/GaryGregory> http://twitter.com/GaryGregory
> >
> >
> > --
> > Matt Sicker <<mailto:[email protected]>[email protected]<mailto:
> [email protected]>>
> >
> >
> >
> > --
> > E-Mail: <mailto:[email protected]> [email protected]<mailto:
> [email protected]> | <mailto:[email protected]> [email protected]
> <mailto:[email protected]>
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition<http://www.manning.com/tahchiev/>
> > Spring Batch in Action<http://www.manning.com/templier/>
> > Blog: <http://garygregory.wordpress.com/>
> http://garygregory.wordpress.com
> > Home: <http://garygregory.com/> http://garygregory.com/
> > Tweet! <http://twitter.com/GaryGregory> http://twitter.com/GaryGregory
> >
> >
> >
> > --
> > E-Mail: <mailto:[email protected]> [email protected]<mailto:
> [email protected]> | <mailto:[email protected]> [email protected]
> <mailto:[email protected]>
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition<http://www.manning.com/tahchiev/>
> > Spring Batch in Action<http://www.manning.com/templier/>
> > Blog: <http://garygregory.wordpress.com/>
> http://garygregory.wordpress.com
> > Home: <http://garygregory.com/> http://garygregory.com/
> > Tweet! <http://twitter.com/GaryGregory> http://twitter.com/GaryGregory
> >
> >
> >
> > --
> > Regards,
> > Sampath
> >
> >
> >
> > --
> > E-Mail: <mailto:[email protected]> [email protected]<mailto:
> [email protected]> | <mailto:[email protected]> [email protected]
> <mailto:[email protected]>
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition<http://www.manning.com/tahchiev/>
> > Spring Batch in Action<http://www.manning.com/templier/>
> > Blog: <http://garygregory.wordpress.com/>
> http://garygregory.wordpress.com
> > Home: <http://garygregory.com/> http://garygregory.com/
> > Tweet! <http://twitter.com/GaryGregory> http://twitter.com/GaryGregory
> >
> >
> >
> > --
> > Regards,
> > Sampath
> >
> >
> >
> > --
> >
> >
> > Mikael Ståldal
> > Senior software developer
> >
> > Magine TV
> > <mailto:[email protected]>[email protected]<mailto:
> [email protected]>
> > Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   <
> http://www.magine.com/> www.magine.com<http://www.magine.com>
> >
> > Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> > (or responsible for delivery of the message to such a person), you may
> not copy or deliver this message to anyone. In such case,
> > you should destroy this message and kindly notify the sender by reply
> email.
> >
> >
> >
> > --
> >
> >
> > Mikael Ståldal
> > Senior software developer
> >
> > Magine TV
> > <mailto:[email protected]>[email protected]<mailto:
> [email protected]>
> > Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   <
> http://www.magine.com/> www.magine.com<http://www.magine.com>
> >
> > Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> > (or responsible for delivery of the message to such a person), you may
> not copy or deliver this message to anyone. In such case,
> > you should destroy this message and kindly notify the sender by reply
> email.
> >
> >
> >
> > --
> > E-Mail: [email protected]<mailto:[email protected]> | <mailto:
> [email protected]> [email protected]<mailto:[email protected]>
> > Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> > JUnit in Action, Second Edition<http://www.manning.com/tahchiev/>
> > Spring Batch in Action<http://www.manning.com/templier/>
> > Blog: http://garygregory.wordpress.com<http://garygregory.wordpress.com/
> >
> > Home: http://garygregory.com/
> > Tweet! http://twitter.com/GaryGregory
> >
> >
> >
> > --
> > Matt Sicker <<mailto:[email protected]>[email protected]<mailto:
> [email protected]>>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>


-- 
Matt Sicker <[email protected]>

Reply via email to