哈希表的使用及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;
}

浙公网安备 33010602011771号