1.Map接口下有几个子类,各自有什么特点?
有3个子类:HashMa;LikedHashMap;Hash table;
HashMap是双列集合,并且无序,底层原理是有由哈希表(数组+单项链条/红黑树)存储元素,多线程所以查询速度非常快,但确是相对不安全的集合,可以储存null键和null值,并且K键是唯一的不可重复,V值可以重复。
LikedHashMap是HashMap的子类,有一点不同的是LikedHashMap是有序的集合,底层多了个链条来记录元素顺序。其他特点跟Hash Map一样。
Hashtable是一个相对比较古老的Map的子类,也是双列集合,无序,是一个单线程效率低,但却又是更加安全的集合,无法存储null键和null值,目前已基本被替代,但他有一个子类目前还仍在使用,今天还未学习。
2.目前为止,我们所学的遍历map集合有几种方式?
目前有2种方法,第1种方式keySet,通过键找值方法,使用键值获取对应的V值;第2种方式entrySet,通过存储键值对的映射关系,将一对对的元素储存到集合中,这个方法更多面向键值为自定义的对象类型。
3.请用自己的语言描述你所了解的集合体系
集合体系主要分为2大类:Collection 单列集合 和 Map 双列集合。
Collection下有两大类型的集合:List集合:有序,有索引,元素可重复;Set集合:无索引,元素不可重复;
List类:ArrayList集合,有索引查询速度快,增删慢因为底层由数组组成,增删时都要复制到新数组;
LinkedList集合,查询慢因为底层是链表结构,需要从头逐一获取元素,增删快因为只需要记住下一个元素的地址,每次增删都在此地址值;
Vector集合:古老的集合,线程安全,但效率低。
Set类:HashSet集合:无序,底层由哈希表存储元素,存储元素是通过比较哈希值,哈希值不同直接添加,哈希值相同,再比较属性,不同才添加,所以必须重写HashCode和eglus方法;
LinkedHashSet集合:是HashSet的子类,有序,因为底层是由哈希表+链条的结构记录元素,链条记录了顺序,保证了有序,其他和Hashset相同;
Map集合有3种类型,共性特点是:双列集合,一个元素包含两个值:Key键,Value值,K和V数据类型可以不同或相同,K键是唯一的不可重复,V值可以重复,两者成对共存;
HashMap集合:底层由哈希表+单项链条(或红黑树)结构存储元素,查询快,无序,多线程,可以存储Null键和Null值,因为无序所以无法使用迭代器进行遍历,需要使用KeySet或EntrySet进行便利。
LinkedHashMap集合:是HashMap的子类,底层由哈希表+链表组成,链表用来记录顺序,所以它是有序集合,其他特点跟HashMap一样;
Hashtable集合:是相对古来的集合,继承Map接口,一样也是双列集合,无序,是一个线程安全的集合,但效率比较低速度慢,不能储存Null键和Null值。但它有一个子类现在还很活跃。
|