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

Reply via email to