Java\LeetCode刷题----哈希表专题

Java哈希表专题

引言:当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。哈希结构通常包括数组、HashSet、HashMap三种,哈希法通过牺牲空间来换取时间,因为我们要使用额外的数组、set或者是map来存放数据,才能实现快速的查找。例如要查询一个名字是否在这所学校里,要枚举的话时间复杂度是O(n),但如果使用哈希表的话, 只需要O(1)就可以做到。

1.HashSet

​ HashSet是一个无序的、不含重复元素的集合。

// 创建
HashSet<Integer> set = new HashSet<>();
// 添加
set.add(1);
set.add(2);
// 删除
set.remove(1);
// 大小
set.size();
// 判断一个元素是否在集合内
set.contains(1);
// 判空
set.isEmpty();

2.HashMap

​ HashMap比HashSet更常用一些,其与python中的字典结构一致,由一个或多个键值对组成,通常用于计数或者匹配等问题。

// 创建
HashMap<Character,Integer> map = new HashMap<>();
// 添加
map.put('A',1);
map.put('B',2);
map.put('C',3);
map.put('D',4);
// 删除(根据键值移除)
map.remove('A');
// 大小
map.size();
// 获取键对应的值
map.get('B');
// 尝试获取键对应的值,如果没有该key就返回默认值
map.getOrDefault('B',0);
// 判空
map.isEmpty();
// 判断是否包含某个key或某个Value
map.containsKey('C');
map.containsValue(2);
// 获取Key集合或者Value集合
map.keyset();// 返回Set
map.values();// 返回Collection
// 获取Key-Value对应的Map.Entry
map.entrySet();// 返回Set>
// 将HashMap转化为列表
List<Map.Entry<Character,Integer> list = 
    new ArrayList<>(map.entrySet);
// Map.Entry的一些方法
for(Map.Entry<Character,Integer> e: map.entrySet()){
    e.getKey();
    e.getValue();
    e.setVlaue(2);
}

3.LeetCode中的相关题目

242. 有效的字母异位词

349. 两个数组的交集

202. 快乐数

1. 两数之和

454. 四数相加 II

383. 赎金信

你可能感兴趣的:(LeetCode刷题记录,java,leetcode,散列表)