Multiset
無(wú)序+可重復(fù)
利用Multiset重新解決之前的字符串出現(xiàn)次數(shù)的問(wèn)題,可以很容易解決。
利用這個(gè)功能可以完成很多有用的功能,如可以用來(lái)統(tǒng)計(jì)網(wǎng)站會(huì)員訪問(wèn)的次數(shù)。
element();返回元素的容器
count();返回重復(fù)的次數(shù)
public static void main(String[] args) {
String str = "this a cat and that is a mice where is the food";
//分割字符串
String[] strs = str.split(" ");
//把字符串放進(jìn)Multiset里面
Multiset<String> set=HashMultiset.create();
for(String temp:strs){
set.add(temp);
}
//獲取Multiset里的元素
Set<String> eset=set.elementSet();
for(String temp:eset){
System.out.println(temp+"---------->"+set.count(temp));//count記錄出現(xiàn)的次數(shù)
}
}
Multimap
Multimap是鍵可以重復(fù)的map
這里的意思,內(nèi)部實(shí)現(xiàn)就是當(dāng)鍵重復(fù)時(shí),他的值不會(huì)覆蓋,而是存到對(duì)應(yīng)于鍵的一個(gè)容器里。這樣子我們可以用他來(lái)統(tǒng)計(jì)重復(fù)的具體內(nèi)容。
以下使用Multimap統(tǒng)計(jì)老師教授的課程
public static void main(String[] args) {
//統(tǒng)計(jì)每個(gè)老師教的課程
Map<String, String> map=new HashMap<>();
map.put("電力電子技術(shù)","王偉");
map.put("單片機(jī)","王偉");
map.put("微機(jī)", "劉一帆");
map.put("局域網(wǎng)", "劉一帆");
map.put("高數(shù)", "李小偉");
map.put("現(xiàn)控", "沈浩");
Multimap<String, String> teachers=ArrayListMultimap.create();
//迭代之前的map,吧元素存進(jìn)新的Multimap,但是用老師來(lái)當(dāng)做鍵,這樣子每個(gè)老師的課程就存在一起了
Iterator<Map.Entry<String, String>> it=map.entrySet().iterator();
while(it.hasNext()){
Entry<String, String> entry=it.next();
String key=entry.getKey();
String value=entry.getValue();
teachers.put(value,key);
}
//獲的鍵
Set<String> keys=teachers.keySet();
for(String key:keys){
Collection<String> col=teachers.get(key);
System.out.println(key+"---->"+col);
}
}
BiMap
鍵跟值都不能重復(fù)的map
因?yàn)殒I-值都不能重復(fù),所以可以反轉(zhuǎn)inverse();此時(shí)鍵值對(duì)調(diào),就可以通過(guò)值來(lái)找鍵了
public static void main(String[] args) {
BiMap<String, String> map=HashBiMap.create();
map.put("Viking", "viking@qq.com");
map.put("good", "good@qq.com");
//因?yàn)殒I-值都不能重復(fù),所以可以反轉(zhuǎn)inverse();反轉(zhuǎn),此時(shí)鍵值對(duì)調(diào),就可以通過(guò)值來(lái)找鍵了
String usr=map.inverse().get("viking@qq.com");
System.out.println(usr);
}