【JAVA SE基础篇】43.Map接口和Set接口的常用方法

1.Map接口

成对存储某些信息时,例如:微信手机号对应一个微信号。

Map就是用来存储“键(key)-值(value)对”.Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复

Map接口的实现类有HashMap、TreeMap、HashTable、Properties等。

Map接口的常用方法:

1.Object put(Object key,Object value):存放键值对。

2.Object get(Object key):通过键对象查找得到值对象

3.Object remove(Object key):删除键对象对应得键值对

4.boolean containsKey(Object key):Map容器中是否包含键对象对应的键值对

5.boolean conrainsValue(Object value):Mao容器中是否包含值对象对应得键值对

6.int size():包含键值对得数量

7.boolean isEmpty():Map是否为空

8.void putAll(Map t):将t的所有键值对存放到本Map对象

9.void clear():清空本Map对象所有的键值对

例:

 

 例:

 2.HashMap底层实现

HashMap底层实现采用了哈希表。 哈希表的基本结构:数组+链表。

1.数组:占用空间连续,寻址容易,增删效率低

2.链表:占用空间不连续,寻址困难,增删效率高

哈希表结合了数组和链表的优点:查询块,增删效率高 

在jdk8中,hashmap在存储一个元素时,当对应链表大于8时,链表转换为红黑树。

 3.TreeMap使用和底层实现

TreeMap底层是红黑二叉树,在遇到key或者value需要排序的时候就用TreeMap(使用不多)

例:

泛型为自定义类的时候可以用comparable接口来排序

 

4.HashTable底层实现

HashTable和HashMap用法几乎一致,底层实现也类似,HashTable加入了synchronized关键字确保线程同步检查

HashMap:线程不安全,效率高,允许泛型为空

HashTable:线程安全,效率低,不允许泛型为空

5.Set接口

Set接口继承于Collection,Set接口无新增方法,方法和Collection一致,所有List方法都可用于Set接口。

Set容器特点:无序,不可以重复,无序代表Set中的元素无索引,我们只能通过遍历查找。

新元素加入时和Set中任意一个元素通过equals()比较时为true,则不能加入,Set中只能由一个null元素

Set接口的实现类有:HashSet和TreeSet等,常用HashSet。

例:

6.HashSet底层实现

HashSet底层采用哈希算法实现,相当于HashMap的简化版,因此查询和增删效率都比较高

HashSet中每个元素都是HashMap+key,因为key不能重复,所以HashSet不能重复。

7.TreeSet底层实现

TreeSet底层实际用TreeMap实现,相当于简化的TreeMap,通过key来存储Set的元素。

TreeSet内部需要对存储单元进行排序,同样使用Comparable接口比较

 

posted @ 2020-06-29 13:19  CKuan  阅读(397)  评论(0编辑  收藏  举报