Java基础知识回顾-22(Set接口和Map接口)

1、HashSet是Set的实现类,一般调用它或LinkedHashSet来存储不重复元素数据,区别是HashSet存储的数据是无序的,而LinkedHashSet存储的数据是有序的。

2、HashSet存储数据的基本结构是哈希表,哈希表的结构图如下:

当存入数据(add方法)时,先判断数据的hashcode值,如果不同,则将数据存入哈希表中,如果相同,再判断数据的equals值,即其内容,如果也相同,则不存储该数据,如果不相同,则在当前的hascode值的下面添加数据。

3、保证存入数据的唯一性的前提是引用添加方法对象的数据类型已经重写了hashCode()和equals(),自定义数据类型需要重写这两种方法,string和基本数据的包装类则不需要重写,因为已经被重写了。

4、当ArrayList存储的是自定义数据类型的时候,如果调用其equals方法比较大小,而自定义数据类型没有重写equals方法,则其比较的是两者的地址值,

5、Map接口的实现类是HashMap,LinkedHashMap。HashMap采取哈希表结构;LinkedHashMap采取哈希表+链表的结构,哈希表保证数据的唯一性,链表保证了存取数据的有序性。

6、Map类集合与Collection类集合的区别是它的存储元素是"夫妻关系式"成对的,每一对由键(key)和值(value)组成,而Collection类存储的数据是单个的。

   Map类集合称为双列集合,Collection类集合称为单列集合。

   Map类中的键不能是重复的,值可以是重复的,而Collection类集合中存储的元素可以是重复的。

7、Map类集合中判断key值是否重复,也是判断hashCode()和equals(),所以自定义类中需要重写hashCode()和equals()。

扫描二维码关注公众号,回复: 1339794 查看本文章

8、Map接口的常用方法:(1)get(Object key)获得指定key值的数据,没有返回null

             (2)put(K key V value)如果key值相同,则覆盖旧的value值,否则添加数据

             (3)remove(Object key)删除指定key值的数据

9、Map遍历的两种方法:keySet()获得key值的Set集合,通过迭代器或增强for获得key值,然后利用get方法可得到value值

             entrySet()获得key和value组成的entry值,其泛型需要用使用<Math.Entry<K,V>>的形式。通过迭代器和增强for获得entry值,然后通过getKey()和            getValue()获得key值和value值

10、当Map类集合存储的键的数据类型为自定义数据类型时,需要重写自定义数据类型的hashCode和equals方法,否则Map的键值变得可以重复。

猜你喜欢

转载自www.cnblogs.com/zhangrui0328/p/9122378.html