Map集合

一.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();
    }

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值