Java 21 新特性

您所在的位置:网站首页 ArrayDeque有序 Java 21 新特性

Java 21 新特性

2024-06-14 19:41| 来源: 网络整理| 查看: 265

我们先看在 Java 21 之前,访问Java中集合的第一个和最后一个元素的方式:

集合 获取第一个元素 获取最后一个元素 List list.get(0) list.get(list.size() - 1) Deque deque.getFirst() deque.getLast() SortedSet sortedSet.first() sortedSet.last()

三个集合提供了三类不同的使用方法,非常混乱。为了解决这种混乱,Java 21 引入有序集合,旨在解决访问Java中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景。

它新增了 SequencedCollection,SequencedSet,SequencedMap 三个接口,使得 Java 中的有序集合类可以按照统一的方法来进行操作。

SequencedCollection SequencedSet SequencedMap

下图很好地展示了新增的有序接口的关系。

SequencedCollection 接口定义定义了如下方法:

addFirst():将元素添加为此集合的第一个元素。 addLast():将元素添加为此集合的最后一个元素。 getFirst():获取此集合的第一个元素。 getLast():获取此集合的最后一个元素。 removeFirst():移除并返回此集合的第一个元素。 removeLast():移除并返回此集合的最后一个元素。 reversed():倒叙此集合。

SequencedMap 接口定义了如下方法:

firstEntry():返回此 Map 中的第一个 Entry,如果为空,返回 null。 lastEntry():返回此 Map 中的最后一个 Entry,如果为空,返回 null。 pollFirstEntry():移除并返回此 Map 中的第一个 Entry。 pollLastEntry():移除并返回此 Map 中的最后一个 Entry。 putFirst():将 key-value 插入此 Map 中,如果该 key 已存在则会替换。注意,此操作完成后,该 key-value 就已经存在于此 Map 中,并且是第一位。 putLast():将 key-value 插入此 Map 中,如果该 key 已存在则会替换。注意,此操作完成后,该 key-value 就已经存在于此 Map 中,并且是最后一位。 reversed():倒叙此Map。 sequencedEntrySet():返回此 Map 的 Entry。 sequencedKeySet():返回此 Map 的keySet的SequencedSet视图。 sequencedValues():返回此 Map 的 value集合的SequencedCollection视图。

下面来演示下。

SequencedCollection @Test public void sequencedCollectionTest() { List listTemp = List.of("死磕Java","死磕Java新特性","死磕Netty","死磕Spring","死磕NIO","死磕Redis"); List list = new ArrayList(listTemp); Deque deque = new ArrayDeque(listTemp); LinkedHashSet linkedHashSet = new LinkedHashSet(listTemp); TreeSet sortedSet = new TreeSet(listTemp); System.out.println("=========输出第一个元素=============="); System.out.println("list.getFirst():" + list.getFirst()); System.out.println("deque.getFirst():" + deque.getFirst()); System.out.println("linkedHashSet.getFirst():" + linkedHashSet.getFirst()); System.out.println("sortedSet.getFirst():" + sortedSet.getFirst()); System.out.println("=========输出最后一个元素=============="); System.out.println("list.getLast():" + list.getLast()); System.out.println("deque.getLast():" + deque.getLast()); System.out.println("linkedHashSet.getLast():" + linkedHashSet.getLast()); System.out.println("sortedSet.getLast():" + sortedSet.getLast()); Consumer reversedPrint = sequencedCollection -> { sequencedCollection.reversed().forEach(x -> System.out.print(x + " ")); System.out.println(); }; System.out.println("=========reversed 输出=============="); reversedPrint.accept(list); reversedPrint.accept(deque); reversedPrint.accept(linkedHashSet); reversedPrint.accept(sortedSet); } // 执行结果...... =========输出第一个元素============== list.getFirst():死磕Java deque.getFirst():死磕Java linkedHashSet.getFirst():死磕Java sortedSet.getFirst():死磕Java =========输出最后一个元素============== list.getLast():死磕Redis deque.getLast():死磕Redis linkedHashSet.getLast():死磕Redis sortedSet.getLast():死磕Spring =========reversed 输出============== 死磕Redis 死磕NIO 死磕Spring 死磕Netty 死磕Java新特性 死磕Java 死磕Redis 死磕NIO 死磕Spring 死磕Netty 死磕Java新特性 死磕Java 死磕Redis 死磕NIO 死磕Spring 死磕Netty 死磕Java新特性 死磕Java 死磕Spring 死磕Redis 死磕Netty 死磕NIO 死磕Java新特性 死磕Java SequencedMap @Test public void sequencedMapTest() { LinkedHashMap linkedHashMap = new LinkedHashMap(); linkedHashMap.put("Java","死磕 Java 新特性"); linkedHashMap.put("Netty","死磕 Netty"); linkedHashMap.put("Spring","死磕 Spring"); linkedHashMap.put("Redis","死磕 Redis"); Consumer consumer = sequencedMap -> { sequencedMap.forEach((k,v) -> System.out.print(k + "--" + v + ";;")); System.out.println(); }; consumer.accept(linkedHashMap); System.out.println("=========putFirst========="); linkedHashMap.putFirst("Redis","死磕 Redis-01"); consumer.accept(linkedHashMap); System.out.println("=========putLast========="); linkedHashMap.putLast("Java","死磕 Java 新特性-01"); consumer.accept(linkedHashMap); System.out.println(linkedHashMap.sequencedKeySet()); System.out.println(linkedHashMap.sequencedValues()); } // 结果...... Java--死磕 Java 新特性;;Netty--死磕 Netty;;Spring--死磕 Spring;;Redis--死磕 Redis;; =========putFirst========= Redis--死磕 Redis-01;;Java--死磕 Java 新特性;;Netty--死磕 Netty;;Spring--死磕 Spring;; =========putLast========= Redis--死磕 Redis-01;;Netty--死磕 Netty;;Spring--死磕 Spring;;Java--死磕 Java 新特性-01;; [Redis, Netty, Spring, Java] [死磕 Redis-01, 死磕 Netty, 死磕 Spring, 死磕 Java 新特性-01]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3