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]>
