哈希表小结

Hashmap

哈希表:由数组加链表组成。

Hashmap<keydatatype,valuedatatype> map=new Hashmap<>();

Hashset<Interger> set=new Hashset<>();

1.hashmap的结构

数组和链表这两种数据结构,数组根据索引查找元素O(1)方便,但是插入删除比较麻烦。

链表插入删除时,O(1)方便,然而查找时需要从链表头开始比较麻烦,为了克服他们的缺陷,

引入了哈希表。

在哈希表中,存储的位置是根据一个哈希函数求得的,即是说:

 

key是关键字,也称之为键值,这样的查找的时间复杂度可以降低到O(1)。哈希表是一种面向查找的数据存储结构。f称之为哈希函数,有多种构造方法。观察哈希函数,易知可能存在哈希冲突,即是说两个不同的Key键值,求出的哈希地址值相同,即:

 

这样的现象称之为哈希冲突,为了解决哈希冲突,有多种方法,包括开放定址法,再散列函数法等等。在Java中采用的是链地址法

将所有的拥有同义词的记录在同一个单链表中,如下图所示:

img

hashmap常用的方法:

1.put(Object key,Object value)和putAll(Collection c)添加映射 2.get(Object key)根据键来获取对应的值 3.containsKey(Object key)和containsValue(Object value)//用于判断key或者value是否存在 4.remove(Object key)根据key删除映射关系 5.values()//返回哈希表值的集合 6.isEmpty()//判断表是否为空 7.entrySet()//键值对集合,对键值对集合可使用getkey()和getvalue()操作。 8.keySet()//键的集合

2.Hashset

Hashset是hashmap的一种特殊集合。Hashset的初始化:Hashset<Interger> set=new Hashset<>();

常用的方法是:

add():添加元素

contains():检查是否包含某种元素

size():计算其大小

remove():删除元素

for-each进行遍历访问。for-each代码简洁,运行速度更快一点。

 

posted @ 2021-04-11 19:22  汪小川  阅读(56)  评论(0编辑  收藏  举报