Commons 集合操作與隊(duì)列擴(kuò)展

集合操作

以下集合操作返回的都是個(gè)Collection

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

因?yàn)榫唧w程序很簡(jiǎn)單,就不放示例程序了。需要注意的是,返回的都是Collection,即不轉(zhuǎn)型的話(huà),只能使用那些基本的操作了。

隊(duì)列擴(kuò)展

  1. 循環(huán)隊(duì)列
    即隊(duì)列滿(mǎn)了時(shí)候再添加元素,會(huì)自動(dòng)彈出先進(jìn)來(lái)的元素,再在后面添加。
    使用CircularFifoQueue類(lèi)
public static void circularFifoQueue(){
        //創(chuàng)建兩個(gè)元素的循環(huán)隊(duì)列
        CircularFifoQueue<String> cirque=new CircularFifoQueue<>(2);
        cirque.add("a");
        cirque.add("b");
        cirque.add("c");
        for(String temp:cirque)
            System.out.println(temp);
    }
輸出結(jié)果:
b
c
  1. 只讀隊(duì)列
    與javaAPI里頭一個(gè)樣,對(duì)容器進(jìn)行包裝。只是產(chǎn)生了一個(gè)容器的快照,不能對(duì)該快照進(jìn)行操作。但對(duì)原容器進(jìn)行操作還是可以的,并且快照也會(huì)隨之變化。
    用UnmodifiableQueue.unmodifiableQueue(隊(duì)列);來(lái)包裝
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();
        //改變?cè)萜?        que.add("f");
        //再遍歷輸出
        for(String temp:readonlyqueue){
            System.out.print(temp+"\t");
        }
    }
輸出結(jié)果:
a   b   c   d   
a   b   c   d   f
  1. 斷言隊(duì)列
    即利用斷言來(lái)限制加入隊(duì)列的元素種類(lèi)
    使用PredicatedQueue.predicatedQueue(隊(duì)列,斷言);來(lái)包裝
public static void predicatedqueue(){
        Queue<String> que=new LinkedList<>();
        //設(shè)置斷言,不能添加帶有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
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,624評(píng)論 18 399
  • 迭代器的擴(kuò)展 map迭代器MapIterator 很方便,以后將不再使用map.keyset來(lái)用Iterator訪(fǎng)...
    VikingOldYoung閱讀 1,024評(píng)論 0 0
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 2,069評(píng)論 0 2
  • 有些事,真到不像真的,像月份牌上的女人,與現(xiàn)實(shí)總隔了紅塵萬(wàn)丈,千里萬(wàn)里。像早起開(kāi)門(mén)撲棱棱亂飛的雪,驚到讓人疑心落錯(cuò)...
    亦緣君閱讀 231評(píng)論 0 1

友情鏈接更多精彩內(nèi)容