一、基础知识
哈希表
哈希表(hash table)是根据关键码的值而直接进行访问的数据结构。数组就是一张哈希表,它的关键码是索引下标,数组能根据索引下标直接访问对应元素。
哈希表和python中的字典类似。
一般哈希表都是用来快速判断一个元素是否出现集合里,时间复杂度为O(1)。
常用的三种哈希结构
- 数组
- 集合(set)
- 映射(map)
二、映射
映射(map)是键值对(key-value),可以实现快速查找和修改value。
key不重复,所以使用put方法放入新的键值对,就会覆盖原key对应的键值对。
映射声明:
// key类型:String。value:String类型的列表
// 创建实例时用HashMap
Map<String, List<String>> map = new HashMap<String, List<String>>();
根据key值获取value:
// 创建新的变量接收value(类型与map的value一致)
// 用getOrDefault()方法,参数为key和value默认值
List<String> list = map.getOrDefault(key, new ArrayList<String>());
根据key/value查找:
Boolean keyExisted = map.containsKey(key);
Boolean valueExisted = map.containsValue(value);
增删键值对:
// list是key对应的value
// 如果key已存在,新的键值对将覆盖旧的
map.put(key, list);
// 从Map中移除指定的key-value对
map.remove(key);
三、集合
集合(set)是不重复的元素的集合,可以用来对数组等快速去重。并且集合可以快速查找和增删。
集合声明:
// 集合中元素的类型:Integer
// 创建实例时用HashSet
Set<Integer> set1 = new HashSet<Integer>();
查找元素:
// contains()方法,返回boolean值
if (set1.contains(i)) {
...
}
增删元素:
// 增加元素i
set1.add(i);
// 移除指定元素
boolean removedElement = set.remove(2);
if (removedElement) {
System.out.println("成功移除元素");
} else {
System.out.println("未能找到要移除的元素");
}
四、使用说明
- 当需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希表法。
- 具体使用数组还是映射还是集合,根据是否需要快速查找、需要记录一个还是两个数据等要求选择。