【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接口比较