How about `OrderedCollection`? The meaning of "order" has been defined in the Stream API, so I think the 'ordered' may be a better choice.
Stuart Marks <stuart.ma...@oracle.com> 于2022年2月15日周二 14:45写道: > > > On 2/11/22 7:24 PM, Tagir Valeev wrote: > > Of course, I strongly support this initiative and am happy that my > proposal got some > > love and is moving forward. In general, I like the JEP in the way it is. > I have only > > two slight concerns: > > > 1. I'm not sure that having addition methods (addFirst, addLast, > putFirst, putLast) > > is a good idea, as not every mutable implementation may support them. > While this > > adds some API unification, it's quite a rare case when this could be > necessary. I > > think most real world applications of Sequenced* types would be around > querying, or > > maybe draining (so removal operations are ok). Probably it would be > enough to add > > addFirst, addLast, putFirst, putLast directly to the compatible > > implementations/subinterfaces like List, LinkedHashSet, and > LinkedHashMap removing > > them from the Sequenced* interfaces. In this case, SortedSet interface > will not be > > polluted with operations that can never be implemented. Well my opinion > is not very > > strong here. > > Hi Tagir, thanks for looking at this. > > Yes, this particular issue involves some tradeoffs. As you noted, > addFirst/addLast > can't be implemented by SortedSet and so they throw UOE. This is an > unfortunate > asymmetry. If these were omitted, the design would be cleaner in the sense > that > there would be fewer things that throw UOE. > > But there are costs to not having those methods, which I think outweigh > the > asymmetry around SortedSet. > > The other collections have interfaces corresponding to common > implementations: > ArrayList has List, ArrayDeque has Deque, TreeSet has SortedSet, etc., and > Java > style tends to encourage "programming to the interface." But there's no > interface > that corresponds to LinkedHashSet. > > Over the years we've mostly just put up with this gap. But it's really > noticeable > when you add the reversed view. The reversed view of a List is a List, the > reversed > view of a Deque is a Deque, the reversed view of a SortedSet is a > SortedSet, and the > reversed view of a LinkedHashSet is a ... what? SequencedSet is the answer > here. > > We also want the reversed view to be equivalent in power to the forward > view. If the > addFirst/addLast methods were only on LinkedHashSet, it would be possible > to add at > either end of a LinkedHashSet but not its reversed view. This is a big > hole. So the > addFirst/addLast methods need to be on the interface. Since the method > specifications originally came from Deque, they're actually on > SequencedCollection. > > In addition, the majority of cases can implement addFirst/addLast: Deque, > List, > LinkedHashSet. SortedSet is the outlier; it would seem a shame to omit the > methods > only because of SortedSet. The alternative is to omit SortedSet from the > SequencedCollection family, but that seems worse, as SortedSet can > implement the > other operations just fine. > > > 2. SequencedCollection name is a little bit too long. I think every > extra letter > > adds a hesitation for users to use the type, especially in APIs where it > could be > > the most useful. I see the Naming section and must admit that I don't > have better > > ideas. Well, maybe just Sequenced would work? Or too vague? > > Yeah, the names are rather longer than I would have liked. At least > "Sequenced" is > shorter than "Reversible". :-) > > One reason it's ok to have a longer name is that it reduces the > possibility of name > collections. > > We want the types to be nouns, so the obvious noun here is Sequence. But > we need Set > and Map variations as well, so that would result in > > Sequence > SequencedSet > SequencedMap > > or similar variations. Kind of asymmetrical. Or maybe Seq, SeqSet, SeqMap? > Not > clearly better. > > One nice thing about the names in the current draft is that they line up > with the > existing collection types nicely: > > Collection SequencedCollection > Set SequencedSet > Map SequencedMap > > I'm not claiming these are absolutely the best names, but I've thought > about this > for a while and I haven't been able to come up with anything clearly > better. I'm > open to better names if there's something I might have missed though. > > s'marks >