哈希表
当需要快速判断一个元素是否出现在集合里的时候,就要用到哈希表。
无限循环就意味着重复出现。
几种哈希实现
- 数组:大小固定
- set:只存key
- map:key:value
Java
数组
动态数组
List<Integer> resList = new ArrayList<>();
//这里必须是Integer,不能是int。
以上动态数组本质上是一个对象,Integer为对象类型,若返回值限定了int[],则需要转化为int[](固定数组)
int index = 0;
int res[] = new int[resList.size()];
for(int i : resList)
res[index++] = i;
return res;
HashSet
使用HashSet需要import两个包
import java.util.HashSet;
import java.util.Set;
声明HashSet
Set<Integer> set1 = new HashSet<>();
对应的方法包括add,contains,size【注意不是length】
for (int i : nums1) {
set1.add(i);
}
for (int i : nums2) {
if (set1.contains(i)) {
resSet.add(i);
}
}
int[] arr = new int[resSet.size()];
集合转化为数组可以使用
return resSet.stream().mapToInt(x -> x).toArray();
也可以使用上述动态数组中的转化方法,申请一个数组赋值。
int[] arr = new int[resSet.size()];
int j = 0;
for(int i : resSet){
arr[j++] = i;
}
map
声明定义
Map<Integer, Integer> map = new HashMap<>();
包含方法containsKey,get,put
if (map.containsKey(temp)){
int []res = new int[2];
res[1]= i;
res[0] = map.get(temp);
return res;
}
//若没有对应,则添加进map
map.put(nums[i],i);
getOrDefault 用于从映射(map)中根据指定的键(key)获取相应的值(value)。
如果映射中不包含这个键,getOrDefault 方法将返回调用者提供的默认值。
方法
charAt()
获取ASCII码值
record[s.charAt(i) - 'a']++;
toCharArray()
获取ASCII码值
for 遍历
遍历数组里的值,声明一个变量,用: 数组。
for (int count: record) {
if (count != 0) {
return false;
}
长度
string用.length()
set用size()