map与数组

本文介绍了Java中Map的一些关键操作,包括如何通过`containsValue`找到value对应的key,强调在创建Map时声明key与value类型的重要性,解释了为什么Map不能使用基本数据类型以及如何给数组赋值。此外,还讲解了如何从Map中获取最大值的方法以及Map的getOrDefault()用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,map.containsValue怎么知道value对应的key值

可以将key与value值对换(在元素重复可以覆盖的情况下)
本题为找出数组中相加为目标值的元素下标,可能有[3,3]6的情况,所以不能被覆盖。
但本题只要两个数据,所以数据间两个以上的重复覆盖无影响,所以将map赋值与containsKey放在同一循环即可,为了避免本次循环的数据相加,map赋值需要在containsKey后面,代码如下:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; ++i) {
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
            hashtable.put(nums[i], i);
        }
        return new int[0];
    }
}

2,一些没注意到的细节

1> 如果不希望map内的参数是Object,最好在创建的时候声明key与value的类型
2>map中不能使用基本数据类型,需要使用包装类:

1⃣️基本数据类型的初始值不一定为null,而封装类的初始值都是null
2⃣️因为基本数据类型不能调用其hashcode()方法和equals()方法:

  HashMap存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其equals方法进行比较,如果返回true,则认为是相同的对象,不存储,如果返回false,则认为是不同的对象,可以存储到HashMap集合中。
  在HashMap存储自定义对象(自己定义的实体类,如Map<Student,Integer>)的时候,需要自己再自定义的对象中重写其hashCode()方法和equals方法,才能保证其存储不重复的元素,否则将存储多个重复的对象,因为每new一次,其就创建一个对象,内存地址是不同的。

3>给已有数组赋值,直接给对应下标赋值,比如a[0]=1;

3,MAP集合如何选出最大值

使用map.values()取出map中所有的value值,然后转换成数组形式排序

public class MapMinMaxvalue {
    public static void main(String[] args) {
        Map<Object, Object> map=new HashMap<Object, Object>();
        map.put("张三", 38);
        map.put("李四", 21);
        map.put("王五", 28);
        int length =map.size();
        Collection<Object> c =map.values();
        Object[] obj=c.toArray();
        Arrays.sort(obj);
        System.out.println("Map中的最大值====="+obj[length-1]);
    }
}

4,Map.getOrDefault()

如果 在Map中存在key,则返回key所对应的的value。
如果 在Map中不存在key,则返回默认值。

public class Demo {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("赵四", 24);
        String age= map.getOrDefault("赵四", 30);
        System.out.println(age);// 24,map中存在"赵四",使用其对应值24
        String age = map.getOrDefault("刘能", 30);
        System.out.println(age);// 30,map中不存在"刘能",使用默认值30
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值