给定一个String类数组,然后统计其中每个字符串的个数
用一般的for循环写的话比较麻烦,但如果掌握了Map集合的特点就能快速写出这个程序
代码如下:
public class TeestDemo4 {
/**
* 给定一个数组
* 请你给我统计数组中,每个单词出现的次数?
*/
public static void main(String[] args) {
String[] arr={"aaa","bbb","hah","ll","aaa","bbb","hah","ll","aaa","bbb","hah","ll","ccc","pppp"};
/**
* 思路,遍历数组,将元素放到map集合中。
* 进行判断,如果map集合中已经有这个key了,value+1,put一遍
* key:数组中的元素
* value:这个元素出现的次数
*
*/
HashMap map = new HashMap();
for(int i=0;i<arr.length;i++){
Integer count=1;
if(map.containsKey(arr[i])){
count=(Integer) map.get(arr[i]);
count++;
}
map.put(arr[i],count);
}
//遍历map
Set entrySet = map.entrySet();
Iterator it = entrySet.iterator();
while(it.hasNext()){
Entry next =(Entry) it.next();
System.out.println("key:"+next.getKey()+",value:"+next.getValue());
}
}
}
第一个for循环中通过调用containsKey方法来判断是否存在Key值,如果存在就返回true进入if语句,获取hashmap.get()返回的对象,因为是对象所以建议写成Integer这样的形式。然后将获取的值++操作后,再用hashmap.put()方法覆盖原来的key-values值。
hashmap.enterSet()返回一个Set类的对象命名为entrySet,注意这里Set只是个接口,没法实例化,但hashmap里有公共的方法获取一个new EntrySet()时又转成了Set类,EntrySet是HashMap的一个内部类,继承了抽象类AbstractSet
因为Set继承了Collection中获取Iterator的方法,所以再通过entrySet.iterator()获取一个iterator
之后再while循环里,因为Set里没有指定泛型,所以将it.next()返回的值转成Entry类