Multiset
无序+可重复
利用Multiset重新解决之前的字符串出现次数的问题,可以很容易解决。
利用这个功能可以完成很多有用的功能,如可以用来统计网站会员访问的次数。
element();返回元素的容器
count();返回重复的次数
public static void main(String[] args) {
String str = "this a cat and that is a mice where is the food";
//分割字符串
String[] strs = str.split(" ");
//把字符串放进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记录出现的次数
}
}
Multimap
Multimap是键可以重复的map
这里的意思,内部实现就是当键重复时,他的值不会覆盖,而是存到对应于键的一个容器里。这样子我们可以用他来统计重复的具体内容。
以下使用Multimap统计老师教授的课程
public static void main(String[] args) {
//统计每个老师教的课程
Map<String, String> map=new HashMap<>();
map.put("电力电子技术","王伟");
map.put("单片机","王伟");
map.put("微机", "刘一帆");
map.put("局域网", "刘一帆");
map.put("高数", "李小伟");
map.put("现控", "沈浩");
Multimap<String, String> teachers=ArrayListMultimap.create();
//迭代之前的map,吧元素存进新的Multimap,但是用老师来当做键,这样子每个老师的课程就存在一起了
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
键跟值都不能重复的map
因为键-值都不能重复,所以可以反转inverse();此时键值对调,就可以通过值来找键了
public static void main(String[] args) {
BiMap<String, String> map=HashBiMap.create();
map.put("Viking", "viking@qq.com");
map.put("good", "good@qq.com");
//因为键-值都不能重复,所以可以反转inverse();反转,此时键值对调,就可以通过值来找键了
String usr=map.inverse().get("viking@qq.com");
System.out.println(usr);
}