Map用于存储键值对,键不可重复,值可以重复。
对于一个一维数据,找出各个数字出现的频率并显示。
package com.study.test.collection;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class HashMapTest {
/**
* hashMap集合的使用
* 统计一个数组中出现次数超过n/2的数
* 数组的数 出现次数 键值对
* @param args
*/
public static void main(String[] args) {
int arry[]={2,3,2,7,4,6,2,7,2,9,2,2,6};
Map <Integer,Integer> hashMap=new HashMap<Integer, Integer>();
//hashMap中存放每个数出现的次数
for(int k=0;k<arry.length;k++){
if(hashMap.containsKey(arry[k])){
int temp=hashMap.get(arry[k]);//已经出现的次数
temp=temp+1;
hashMap.put(arry[k], temp);//新次数存入map中
}else{
hashMap.put(arry[k], 1);
}
}
//出现次数大于等于n/2即可
//遍历Map
//方法一
for(Map.Entry<Integer, Integer> entry:hashMap.entrySet()){
int temp=entry.getValue();
if(temp>=arry.length/2){
System.out.println("key="+entry.getKey()+" "+"次数="+entry.getValue());
}
}
//方法二
Iterator<Entry<Integer, Integer>> it=hashMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry=it.next();
if(entry.getValue()>=arry.length/2){
System.out.println("使用Iterator得到的key="+entry.getKey()+" "+"次数="+entry.getValue());
}
}
//treeMap
Map <Integer,Integer>treeMap=new TreeMap<Integer, Integer>(new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return ((Integer) o2).compareTo((Integer) o1);
}
});
Iterator< Integer> itrator=hashMap.keySet().iterator();
while(itrator.hasNext()){
Integer key=itrator.next();
Integer value=hashMap.get(key);
treeMap.put(key, value);
}
Iterator <Integer> itTree=treeMap.keySet().iterator();
System.out.print("使用TreeMap排序结果为");
String count = "";
while(itTree.hasNext()){
Integer key=itTree.next();
System.out.print(key+" ");
count=count+treeMap.get(key)+" ";
}
System.out.println("");
System.out.println("对应的出现次数="+count);
}
}