集合操作
以下集合操作返回的都是個(gè)Collection
- 并集
CollectionUtils.union(容器1,容器2); - 交集
CollectionUtils.intersection(容器1,容器2);
或者retainAll()用法一樣 - 差集
CollectionUtils.subtract(容器1,容器2);
因?yàn)榫唧w程序很簡單,就不放示例程序了。需要注意的是,返回的都是Collection,即不轉(zhuǎn)型的話,只能使用那些基本的操作了。
隊(duì)列擴(kuò)展
- 循環(huán)隊(duì)列
即隊(duì)列滿了時(shí)候再添加元素,會自動彈出先進(jìn)來的元素,再在后面添加。
使用CircularFifoQueue類
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
- 只讀隊(duì)列
與javaAPI里頭一個(gè)樣,對容器進(jìn)行包裝。只是產(chǎn)生了一個(gè)容器的快照,不能對該快照進(jìn)行操作。但對原容器進(jìn)行操作還是可以的,并且快照也會隨之變化。
用UnmodifiableQueue.unmodifiableQueue(隊(duì)列);來包裝
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");
}
}
輸出結(jié)果:
a b c d
a b c d f
- 斷言隊(duì)列
即利用斷言來限制加入隊(duì)列的元素種類
使用PredicatedQueue.predicatedQueue(隊(duì)列,斷言);來包裝
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
}