用什么办法可以快速地找到一个特定的元素?
在哈希表中,不管是寻找、删除、增加一个新的元素,时间复杂度都是O(1)
在哈希表中以键值对的形式存储数据(我们可以把哈希表简单理解为一本字典,每个键(key )是一个单词,而每个单词都有自己对应的解释)
哈希表的实现方式
正如上图所示可以简单的将哈希表理解为(一堆有链表组成的数组)
哈希表使用哈希函数将键转换称为一个哈希值(整型数字),然后将该数组长度取余,得到的数字就当作数组的下标,然后将其键值对添加到对应的链表中。寻找一个键所对应的值时,我们是使用哈希函数将建转换成为数组下标,并在其链表中定位到该关键字所对应的数值。
哈希函数
如果两个不同的输入得到相同的哈希值时,会导致哈希值冲突,如何解决?
哈希表的结构采取的就是数组加链表的形式,当产生的哈希值相同时,可以通过链表的形式,为该位置添加一个节点。
哈希表可以使用的方法
get( K key ):通过特定的关键字拿到其所对应的值
add( Key key, Value value):将一对新的键值对加入哈希表
remove( Key key ):通过关键字,删除哈希表中的键值对
getSize():当前键值对的数量
isEmpty():查看当前哈希表是否为空
Java实现
public class HashMap{
/*节点部分*/
static class HashNode<String, Integer>{
String key;
Integer value;
HashNode<String, Integer> next;
public HashNode(String key, Integer value) {
this.key = key;
this.value = value;
}
}
/*数组部分*/
private ArrayList<HashNode<String, Integer>>bucketArray;
private int numBuckets;
private int size;
public HashMap(){
bucketArray = new