哈希表的使用及leetcode实战

哈希表的使用

在Java中哈希表用于存储对象,实现快速检索。

定义一个哈希表

Map<Integer, Integer> hash = new HashMap<Integer, Integer>();
  • 插入
    public synchronized void put(Object key,Object value)

    给对象value设定一关键字key,并将其加到Hashtable中。若此关键字已经存在,则将此关键字对应的旧对象更新为新的对象Value。这表明在哈希表中相同的关键字不可能对应不同的对象(从哈希表的基本思想来看,这也是显而易见的)。

  • 检索
    public synchronized Object get(Object key)
    根据给定关键字key获取相对应的对象。
    public synchronized boolean containsKey(Object key)
    判断哈希表中是否包含关键字key。
    public synchronized boolean contains(Object value)
    判断value是否是哈希表中的一个元素。

  • 删除
    public synchronized object remove(object key)
    从哈希表中删除关键字key所对应的对象。
    public synchronized void clear()
    清除哈希表
    另外,Hashtalbe还提供方法获取相对应的枚举集合:
    public synchronized Enumeration keys()
    返回关键字对应的枚举对象。
    public synchronized Enumeration elements()
    返回元素对应的枚举对象。

getOrDefault()方法的使用

1、getOrDefault(key,default)
如果存在相应的key则返回其对应的value,否则返回给定的默认值。
2、key的值相同,使value的值加一。比如需要统计一个字符串中所含的字母及对应字母的个数。

  • 定义一个哈希表hash

  • hash.put(c,hash.getOrDefault(c,0)+1); //若没有就是0,若有就是原有值增一。

3、比较两个哈希表中key对应的value值大小:如果其中一个哈希表中不存在某个key,那么两个hash表如何比较。
hash1.getOrDefault(c,0) < hash2.getOrDefault(c,0) //如果两个哈希表都有某个key值,那么他们比较的就是其中value的大小,若其中一个哈希表不存在某个key值,那么比较的就是其中的默认值。

实例

leetcode 004.只出现一次的数字

题目:给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

代码:

public int singleNumber(int[] nums) {
        //定义一个哈希表
        Map<Integer, Integer> hash = new HashMap<Integer, Integer>();
        //将整型数组导入到哈希表
        for (int num : nums) {
//如果key中没有该num值,则导入该值,value为0;
若有该num值,则在则在原有的value值基础上加1.
            hash.put(num, hash.getOrDefault(num, 0) + 1);
        }
        int ans=0;
        //遍历哈希表
        for (Map.Entry<Integer, Integer> entry : hash.entrySet()) {
            //如果找到value为1的,这返回其key值
            if (entry.getValue() == 1) {
                ans=entry.getKey();
            }
        }
        return ans;
    }
posted @ 2022-03-04 16:48  彬不冰  阅读(73)  评论(0)    收藏  举报