三、核心类库改进

431  Sequenced Collections 序列集合

     序列集合通过引入3个接口来实现用一套统一的API记录元素在集合中出现的顺序,通过序列集合可以更方便地对的首尾元素进行操作,或者将集合中的元素进行反转。

JDK21之前,不同类型集合获取第一个元素的方案完全不一样

JDK21开始,提供了几个接口:

1)、SequencedCollection接口

2)、SequencedSet接口

3)、SequencedMap接口

集合之间实现关系如下所示:

案例应用:

1、SequencedCollection接口的实现,常用的一些方法

 public static void main(String[] args) {
        //集合对象
        SequencedCollection<Integer> sequencedCollection = new ArrayList<>(Arrays.asList(10,15,25,35,45));
        System.out.println("原集合:"+sequencedCollection);

        System.out.println("反转后:"+sequencedCollection.reversed());

        //添加元素到首尾
        sequencedCollection.addFirst(1);
        sequencedCollection.addLast(2);
        System.out.println("添加元素后:"+sequencedCollection);

        Integer first = sequencedCollection.getFirst();
        Integer last = sequencedCollection.getLast();
        System.out.println("首元素为:"+first+",尾元素为:"+last);

        //移除首尾元素
        Integer first1 = sequencedCollection.removeFirst();
        System.out.println("移除首元素后:"+sequencedCollection);
        System.out.println("移除的首元素为:"+first1);

        Integer last1 = sequencedCollection.removeLast();
        System.out.println("移除尾元素后:"+sequencedCollection);
        System.out.println("移除的尾元素为:"+last1);
    }

2、SequencedSet接口的实现,常用的一些方法

public class TestSequencedSet2 {
    public static void main(String[] args) {
        //创建有序集合
        SequencedSet<Integer> sequencedSet = new LinkedHashSet<>();

        //添加元素
        sequencedSet.add(1);
        sequencedSet.add(3);
        sequencedSet.add(5);
        System.out.println("原数据:"+sequencedSet);

        //添加首尾元素
        sequencedSet.addFirst(100);
        sequencedSet.addLast(200);
        System.out.println("添加首尾元素后:"+sequencedSet);

        //反转集合
        System.out.println("反转"+sequencedSet.reversed());

        //获取首尾元素
        Integer first = sequencedSet.getFirst();
        System.out.println("首元素为:"+first);
        Integer last = sequencedSet.getLast();
        System.out.println("尾元素为:"+last);

        //移除首尾元素
        sequencedSet.removeFirst();
        System.out.println("移除首元素后:"+sequencedSet);
        sequencedSet.removeLast();
        System.out.println("移除尾元素后:"+sequencedSet);


        System.out.println("***********测试TreeSet**********");
        SequencedSet<String> treeSet = new TreeSet<>();
        treeSet.add("man");
        treeSet.add("boy");
        treeSet.add("girl");
        treeSet.add("woman");
        System.out.println("原数据:"+treeSet);
        System.out.println("反转:"+treeSet.reversed());
        System.out.println("首元素:"+treeSet.getFirst());
        //注意:TreeSet没有实现SequencedSet接口,所以不支持addFirst和addLast方法,会抛出UnsupportedOperationException异常


    }

3、SequencedMap接口的实现,常用的一些方法

public class TestSequencedMap3 {
    public static void main(String[] args) {
        //创建有序集合
        SequencedMap<String,Object> map = new LinkedHashMap<>();
        map.put("girl","Anna");
        map.put("woman","young");
        System.out.println("原数据:"+map);

        //反转
        SequencedMap<String,Object> reversed = map.reversed();
        System.out.println("反转:"+reversed);

        //添加首尾
        map.putFirst("boy","Mike");
        map.putLast("man","old");
        System.out.println("添加后的数据:"+map);

        //获取首尾元素Key
        System.out.println("首元素:"+map.firstEntry().getKey());
        System.out.println("尾元素:"+map.lastEntry().getKey());


        //获取所有的keys集合
        SequencedSet<String> keys=map.sequencedKeySet();
        System.out.println("所有键:"+keys);

        //获取所有的values集合
        SequencedCollection values= map.sequencedValues();
        System.out.println("所有值::"+values);


        //返回首尾元素,并删除
        System.out.println("第一个键值:"+ map.pollFirstEntry());
        System.out.println("最后一个键值:"+ map.pollLastEntry());
        System.out.println("删除后数据:"+map);

    }
}

优点:Sequenced Collections是Java中的一个新特性,它提供了一种有序的集合实现,其具有高效性能、可扩展性等优点。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐