Java 的集合框架长期以来一直需要一种集合类型来表示具有定义的遇到顺序的元素序列和一组适用于此类集合的统一操作。不幸的是,目前对遇到顺序的支持遍布整个类型层次结构,这使得在 API 中表达某些实用概念变得困难。作为回应,有人提议引入新的接口来表示具有定义的遇到顺序的集合,并提供统一的 API 来访问它们的第一个和最后一个元素并以相反的顺序处理它们。
缺少表示具有定义的遇到顺序的元素序列的集合类型一直是问题和投诉的反复来源。例如,虽然List和Deque定义了一个相遇顺序,但它们的共同超类型是Collection,而事实并非如此。同样,Set不指定遇到顺序,子类型如HashSet不定义一个,但子类型如SortedSet和LinkedHashSet做。
为了解决这个问题,已经为序列集合、序列集和序列映射定义了新接口,然后将其改装到现有集合的类型层次结构中。这些接口中声明的所有新方法都有默认实现。序列集合、集合和映射都有不同的特征,序列集合表示其元素具有定义的相遇顺序的集合,序列集合表示不包含重复元素的序列集合,序列映射表示其条目的映射有明确的相遇顺序。
新reversed()方法提供了原始集合的逆序视图,使所有不同的序列类型能够使用所有常用的迭代机制(例如增强的 for 循环、显式循环、 、 、 和iterator())forEach()双向stream()处理parallelStream()元素toArray()。
该SequencedCollection接口包括几个新方法,如下:
该接口包括与, plusSequencedSet相同的方法。最后,该接口包括几个新方法,如下所示:SequencedCollectionreversed()SequencedMap
所有三个新接口都很好地适应了现有的集合类型层次结构,具有List作为SequencedCollection其直接超接口、Deque具有SequencedCollection作为其直接超接口、LinkedHashSet实现SequencedSet、SortedSet具有SequencedSet作为其直接超接口、LinkedHashMap实现SequencedMap和SortedMap具有SequencedMap作为其直接超接口。
SortedSet::addFirst虽然像和SortedMap::putLastthrow这样的显式定位 APIUnsupportedOperationException是因为它们的元素顺序是由相对比较确定的,但让一些集合不实现所有操作的不对称性SequencedCollection是有价值的,因为它把SortedSetandSortedMap带入了顺序集合家族,允许它们被使用比其他方面更广泛。
总的来说,引入新的接口来表示具有定义的遇到顺序的集合和一组适用于这些集合的统一操作是 Java 的集合框架向前迈出的重要一步。通过以一致且易于使用的方式提供对遭遇顺序的支持,该框架对于开发人员来说将变得更加直观和高效。关于作者,ANM Bazlur Ra??hman 在 Contrast Security 担任高级软件工程师。他在软件行业拥有十多年的专业经验,主要从事 Java 和 Java 相关技术。最近,他被任命为 Java Champion。在正常工作时间之外,他喜欢指导、写作、在会议上发言以及为开源项目做出贡献。他是孟加拉国 Java 用户组的创始人和现任主持人。自 2013 年以来,他组织??了聚会和会议,与社区分享 Java 相关知识。他被 DZone 评为最有价值的博主 (MVP),DZone 是世界上最受认可的技术出版商之一。除了 DZone,他还是另一家领先的技术内容发布者和会议组织者 InfoQ 的 Java Queue 的编辑,以及 Foojay.io 的编辑,OpenJDK 朋友的地方。此外,他还出版了四本关于 Java 编程语言的孟加拉语书籍;他们是孟加拉国的畅销书。他在孟加拉国达卡大学信息技术学院获得信息技术学士学位,主修软件工程。他目前住在加拿大多伦多。