美文网首页
Commons 集合操作与队列扩展

Commons 集合操作与队列扩展

作者: VikingOldYoung | 来源:发表于2016-11-07 10:27 被阅读0次

    集合操作

    以下集合操作返回的都是个Collection

    1. 并集
      CollectionUtils.union(容器1,容器2);
    2. 交集
      CollectionUtils.intersection(容器1,容器2);
      或者retainAll()用法一样
    3. 差集
      CollectionUtils.subtract(容器1,容器2);

    因为具体程序很简单,就不放示例程序了。需要注意的是,返回的都是Collection,即不转型的话,只能使用那些基本的操作了。

    队列扩展

    1. 循环队列
      即队列满了时候再添加元素,会自动弹出先进来的元素,再在后面添加。
      使用CircularFifoQueue类
    public static void circularFifoQueue(){
            //创建两个元素的循环队列
            CircularFifoQueue<String> cirque=new CircularFifoQueue<>(2);
            cirque.add("a");
            cirque.add("b");
            cirque.add("c");
            for(String temp:cirque)
                System.out.println(temp);
        }
    输出结果:
    b
    c
    
    1. 只读队列
      与javaAPI里头一个样,对容器进行包装。只是产生了一个容器的快照,不能对该快照进行操作。但对原容器进行操作还是可以的,并且快照也会随之变化。
      用UnmodifiableQueue.unmodifiableQueue(队列);来包装
    public static void readOnlyQueue(){
            Queue<String> que=new LinkedList<>();
            que.add("a");
            que.add("b");
            que.add("c");
            que.add("d");
            
            Queue<String> readonlyqueue=UnmodifiableQueue.unmodifiableQueue(que);
            //readonlyqueue.add("f");//java.lang.UnsupportedOperationException
            for(String temp:readonlyqueue){
                System.out.print(temp+"\t");
            }
            System.out.println();
            //改变原容器
            que.add("f");
            //再遍历输出
            for(String temp:readonlyqueue){
                System.out.print(temp+"\t");
            }
        }
    输出结果:
    a   b   c   d   
    a   b   c   d   f
    
    1. 断言队列
      即利用断言来限制加入队列的元素种类
      使用PredicatedQueue.predicatedQueue(队列,断言);来包装
    public static void predicatedqueue(){
            Queue<String> que=new LinkedList<>();
            //设置断言,不能添加带有a的字符串
            Predicate<String> predicate=new Predicate<String>() {
    
                public boolean evaluate(String str) {
                    char c;
                    for(int i=0;i<str.length();i++)
                        {
                            c=str.charAt(i);
                            if(c=='a')
                                return false;//带a返回false
                        }
                    return true;
                }
            };
            
            Queue<String> predicatedqueue=PredicatedQueue.predicatedQueue(que, predicate);
            
            predicatedqueue.add("sex");
            predicatedqueue.add("along");//java.lang.IllegalArgumentException
        }
    

    相关文章

      网友评论

          本文标题:Commons 集合操作与队列扩展

          本文链接:https://www.haomeiwen.com/subject/dstouttx.html