If you want to have Back ward compatibility i think API should expose only* Immutable Iterable* to outside. Internal Data Structure can vary depending on the functionality or performance point of view.
On Wed, Jan 13, 2016 at 6:20 AM, Ralph Goers <[email protected]> wrote: > We run on Java 7 Matt. > > Ralph > > On Jan 12, 2016, at 4:14 PM, Matt Sicker <[email protected]> wrote: > > 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]> > > > -- Regards, Sampath
