package commons之迭代器_双向Map_包;
import java.util.Iterator;
import java.util.Set;
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.bag.HashBag;
import org.apache.commons.collections4.bag.TreeBag;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
import org.apache.commons.collections4.bidimap.DualTreeBidiMap;
/**
- 双向Map:要求.键与值都不能重复
-
BidiMap: inverseBidiMap()反转; 有2个接口
-
1. DualTreeBidiMap 有序
-
2. DualHashBidiMap 无序
- 包: Bag 允许重复;2个实现类
-
1.HashBag 无序
-
2.TreeBag 有序
- 练习:统计单词出现的次数 ;接收uniqueSet();获取getCount
/
public class Demo01 {
public static void main(String[] args) {
hashMap();
treeMap();
System.out.println("");
hashBag();
treeBag();
System.out.println("*");
stat();
}
/**-
无序的双向Map
/
public static void hashMap(){
System.out.println("=无序的双向Map==");
BidiMap<String, String> map = new DualHashBidiMap<>();
//双向Map 可以通过键找到值也可以通过值找到键
map.put(“张三”, “BeiJingRen”);
map.put(“李四”, “GuangDongRen”);
//先反转
String str = map.inverseBidiMap().get(“BeiJingRen”);
System.out.println(str);
//遍历查看
MapIterator<String, String> it = map.inverseBidiMap().mapIterator();
while(it.hasNext()){
String key = it.next();
String value = it.getValue();
System.out.println(key+"–>"+value);
}
}
/* -
有序的双向Map
*/
public static void treeMap(){
System.out.println("=有序的双向Map==");
BidiMap<String, String> map = new DualTreeBidiMap<>();map.put(“张三”, “BeiJingRen”);
map.put(“李四”,“GuangDongRen”);
MapIterator<String, String> it = map.inverseBidiMap().mapIterator();
while(it.hasNext()){
String key = it.next();
String value = it.getValue();
System.out.println(key+"–>"+value);//"北:b"排序在"广:g"前;结果是有序排列
}
}
/** -
无序的包 Bag
/
public static void hashBag(){
System.out.println("=无序的包==");
Bag bag = new HashBag();
bag.add(“e”);
bag.add(“c”);
bag.add(“a”);
bag.add(“b”);
bag.add(“a”,5);//a 可以重复5次
bag.remove(“a”, 2);//删除’a’ 2次
//迭代器iterator;在遍历
Iterator it = bag.iterator();
while(it.hasNext()){
System.out.print(it.next()+";");
}
System.out.println();
}
/* -
有序的包 Bag
/
public static void treeBag(){
System.out.println("=有序的Bag==");
Bag bag = new TreeBag<>();
bag.add(“e”);
bag.add(“c”);
bag.add(“b”);
bag.add(“a”);
bag.add(“a”,5);//a 可以重复5次
bag.remove(“a”, 2);//删除’a’ 2次
//迭代器iterator;在遍历
Iterator it = bag.iterator();
while(it.hasNext()){
System.out.print(it.next()+",");
}
}
/* -
单词统计
*/
public static void stat(){//Stat统计
String str = “this is a cat and that is a mice where is the food”;
//分割字符串
String[] atrArray = str.split(" “);
Bag bag = new TreeBag<>();
//遍历数组
for(String temp:atrArray){
bag.add(temp);
}
System.out.println(“统计单词出现次数====”);
//接收
Set keys = bag.uniqueSet();//unique唯一的
for(String temp1:keys){
System.out.println(temp1+”–>"+bag.getCount(temp1));
}
}
}
//结果--------------------------------------------------------------------------
=无序的双向Map==
GuangDongRen–>李四
BeiJingRen–>张三
=有序的双向Map==
BeiJingRen–>张三
GuangDongRen–>李四
-
=无序的包==
a;a;a;a;b;c;e;注意:api描述,说不保证循环元素的顺序,所以就有可能是有序的,也有可能是无序的。我运行几次都这样;
=有序的Bag==
a,a,a,a,b,c,e,**********************************
统计单词出现次数====
a–>2
and–>1
cat–>1
food–>1
is–>3
mice–>1
that–>1
the–>1
this–>1
where–>1