迭代器扩展
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) {
}
/**
* 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<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};
Iterator<Integer> it =new ArrayListIterator<Integer>(arr,1,3);
while(it.hasNext()){
System.out.println(it.next());
}
}
}
双向Map-BidiMap
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) {
dualTreeBidiMap();
}
/**
* 1.无序的双向Map
*/
public static void dualHashBidiMap(){
System.out.println("=====无序的双向Map====");
BidiMap<String,String> map =new DualHashBidiMap<String,String>();
map.put("bj", "bj@test.com");
map.put("sxt", "sxt@qq.com");
System.out.println(map.inverseBidiMap().get("sxt@qq.com"));
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", "bj@test.com");
map.put("sxt", "sxt@qq.com");
MapIterator<String,String> it =map.inverseBidiMap().mapIterator();
while(it.hasNext()){
String key =it.next();
String value =it.getValue();
System.out.println(key+"-->"+value);
}
}
}
Bag包
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) {
}
/**
* 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));
}
}
}