141_容器_commons之迭代器(Map、過濾、迴圈)_雙向Map_Bag包
阿新 • • 發佈:2018-11-09
迭代器擴充套件
- Test06_Iterator.java
package commons.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.collections4.IterableMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.collections4.iterators.ArrayListIterator;
import org.apache.commons.collections4.iterators.FilterIterator;
import org.apache.commons.collections4.iterators.LoopingIterator;
import org.apache.commons.collections4.iterators.UniqueFilterIterator;
import org.apache.commons.collections4.map.HashedMap;
/**
* 迭代器的擴充套件
* 1.MapIterator以後不再使用map.keySet.iterator訪問
* IterableMap介面->HashedMap實現類
* 2.UniqueFilterIterator(去重迭代器 )
* 3.FilterIterator 自定義過濾 +Predicate
* 4.LoopingIterator 迴圈迭代器
* 5.ArrayListIterator 陣列迭代器
*/
public class Test06_Iterator {
public static void main(String[] args) {
// mapIterator();
// uniqueFilterIterator();
// filterIterator();
// loopingIterator();
// arrayListIterator();
}
/**
* 1.Map迭代器-MapIterator
*/
public static void mapIterator (){
System.out.println("=====map迭代器====");
IterableMap<String,String> map =new HashedMap<String,String>();
map.put("a","bjsxt");
map.put("b", "sxt");
map.put("c", "good");
//使用 MapIterator
MapIterator<String,String> it =map.mapIterator();
while(it.hasNext()){
/** 一定要it.next()
it.next();
String key =it.getKey();
*/
String key =it.next();
String value =it.getValue();
System.out.println(key+"-->"+value);
}
}
/**
* 2. 去重迭代器-UniqueFilterIterator
*/
public static void uniqueFilterIterator(){
System.out.println("=====去重迭代器 ====");
List<String> list =new ArrayList<String>();
list.add("a");
list.add("b");
list.add("a");
//去除重複的過濾器
Iterator<String> it =new UniqueFilterIterator<String>(list.iterator());
while(it.hasNext()){
System.out.println(it.next());
}
}
/**
* 3.自定義迭代器-FilterIterator(自定義過濾) +Predicate
*/
public static void filterIterator(){
System.out.println("=====自定義迭代器 ====");
List<String> list =new ArrayList<String>();
list.add("refer");
list.add("dad");
list.add("bjsxt");
list.add("moom");
//自定義條件判斷
Predicate<String> pre =new Predicate<String>(){
public boolean evaluate(String value) {
//迴文判斷
return new StringBuilder(value).reverse().toString().equals(value);
}};
//篩選迴文的過濾器
Iterator<String> it =new FilterIterator<String>(list.iterator(),pre);
while(it.hasNext()){
System.out.println(it.next());
}
}
/**
* 4.迴圈迭代器-LoopingIterator
*/
public static void loopingIterator(){
System.out.println("===== 迴圈迭代器 ====");
List<String> list =new ArrayList<String>();
list.add("refer");
list.add("dad");
list.add("bjsxt");
list.add("moom");
Iterator<String> it =new LoopingIterator<String>(list);
for(int i=0;i<15;i++){
System.out.println(it.next());
}
}
/**
* 5.陣列迭代器-ArrayListIterator
*/
public static void arrayListIterator(){
System.out.println("===== 陣列迭代器 ====");
int[] arr ={1,2,3,4,5};
//陣列迭代器-泛型只能使用引用型別(Integer)
//Iterator<Integer> it =new ArrayListIterator<Integer>(arr);
Iterator<Integer> it =new ArrayListIterator<Integer>(arr,1,3);//指定起始索引和結束索引
while(it.hasNext()){
System.out.println(it.next());
}
}
}
雙向Map-BidiMap
- Test07_BidiMap.java
package commons.collection;
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
import org.apache.commons.collections4.bidimap.DualTreeBidiMap;
/**BidiMap
* 雙向Map->要求鍵與值都不能重複
* 可以通過鍵找值,也可以通過值找鍵->inverseBidiMap()反轉
* 1.DualTreeBidiMap :有序
* 2.DualHashBidiMap :無序
*/
public class Test07_BidiMap {
/**
* @param args
*/
public static void main(String[] args) {
//dualHashBidiMap();
dualTreeBidiMap();
}
/**
* 1.無序的雙向Map
*/
public static void dualHashBidiMap(){
System.out.println("=====無序的雙向Map====");
BidiMap<String,String> map =new DualHashBidiMap<String,String>();
map.put("bj", "[email protected]");
map.put("sxt", "[email protected]");
//反轉
System.out.println(map.inverseBidiMap().get("[email protected]"));
//遍歷檢視
MapIterator<String,String> it =map.inverseBidiMap().mapIterator();
while(it.hasNext()){
String key =it.next();
String value =it.getValue();
System.out.println(key+"-->"+value);
}
}
/**
* 2.有序的雙向Map
*/
public static void dualTreeBidiMap(){
System.out.println("=====有序的雙向Map====");
BidiMap<String,String> map =new DualTreeBidiMap<String,String>();
map.put("bj", "[email protected]");
map.put("sxt", "[email protected]");
//遍歷檢視
MapIterator<String,String> it =map.inverseBidiMap().mapIterator();
while(it.hasNext()){
String key =it.next();
String value =it.getValue();
System.out.println(key+"-->"+value);
}
}
}
Bag包
- Test08_Bag.java
package commons.collection;
import java.util.Iterator;
import java.util.Set;
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
import org.apache.commons.collections4.bag.TreeBag;
/**
* Bag包->允許重複
* 1.HashBag 無序
* 2.TreeBag 有序
* 3.統計單詞的出現次數
*/
public class Test08_Bag {
public static void main(String[] args) {
//hashBag();
//treeBag();
//wordsCount();
}
/**
* 1.無序-HashBag
*/
public static void hashBag(){
System.out.println("=====無序的包====");
Bag<String> bag =new HashBag<String>();
bag.add("a");
bag.add("a",5);
bag.remove("a", 2);
bag.add("b");
bag.add("c");
Iterator<String> it =bag.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
/**
* 2.有序-TreeBag
*/
public static void treeBag(){
System.out.println("=====有序的包====");
Bag<String> bag =new TreeBag<String>();
bag.add("a");
bag.add("a",5);
bag.remove("a", 2);
bag.add("b");
bag.add("c");
Iterator<String> it =bag.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
/**
* 3.統計單詞的出現次數
*/
public static void wordsCount(){
String str ="this is a cat and that is a mice where is the food";
//分割字串
String[] strArray =str.split(" ");
Bag<String> bag =new TreeBag<String>();
for(String temp:strArray){
bag.add(temp);
}
System.out.println("====統計次數===");
Set<String> keys =bag.uniqueSet();
for(String letter:keys){
System.out.println(letter+"-->"+bag.getCount(letter));
}
}
}