一.HashMap类的特点:
1.HashMap是一个散列表,存储内容为键值对(key,value)映射
2.访问速度快,最多允许一条记录的键为null,不允许线程同步
3.无序
二.格式:
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
三.常用方法:
1.Object put(Object key,Object value)
将键值映射存放到Map集合中
2.Object get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null
3.int size( )
返回此映射中的键-值映射关系数
4.Set entrySet( )
将Map集合中的每个键值转换为一个Entry对象,并返回所有Entry对象组成的Set集合
5.getOrDefault(Object key, Object defaultValue)
获取指定key对应的value,如果找不到 key ,则返回设置的默认值
四.例题:
1.输入一个数字n,而后输入一个长度为n的数组,输出出现频率最大的数,如有多个数出现频率最大,从小到大依次输出
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n=scan.nextInt();
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<n;i++)
{
int a=scan.nextInt();
//(数字,数字的出现频率)->(键,值)
map.put(a,map.getOrDefault(a,0)+1);
}
int max=0;
for(Entry<Integer,Integer>entry:map.entrySet())
{
max=Math.max(max,entry.getValue());//获取最大的出现频率
}
List<Integer>list=new ArrayList<Integer>();
for(Entry<Integer,Integer>entry:map.entrySet())
{
if(entry.getValue()==max)
{
list.add(entry.getKey());//将出现频率最大的数存入数组
}
}
Collections.sort(list);//排序
for(int x:list)
{
System.out.print(x+" ");
}
}
2.小明和完美序列
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n=scan.nextInt();
HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();
for(int i=0;i<n;i++)
{
int a=scan.nextInt();
map.put(a,map.getOrDefault(a,0)+1);
}
int count=0;
for(Entry<Integer,Integer>entry:map.entrySet())
{
//若数字的值比其出频率小,则删去多余的数
if(entry.getKey()<entry.getValue())
{
count+=entry.getValue()-entry.getKey();
}
//若数字的值比其出频率大,则直接删去这个数
if(entry.getKey()>entry.getValue())
{
count+=entry.getValue();
}
}
System.out.print(count);
scan.close();
}