最近,小白也面临这大学毕业,马上要出去找工作,在面试准备的过程中,也大体总结了集合框架这部分的知识点,希望能帮到大家。
目录
1.1、List:它是按照元素插入顺序进行存放,元素可以重复。
1.2、Set:它所存储的元素是不可重复的,并且元素都是无序的。
2、Map(它存储的是一个个键值对数据,Map集合中的key不可以重复,每一个key只能映射到一个value)
4、 Collections和Collection有什么区别?
5、 Comparable和Comparator 两个接口的区别
集合框架
这个是小白在网上找到的一个集合框架比较层次比较通俗易懂的一个结构图,圆圈代表的是一个接口,方块代表的是一个实现类。
接下来我们步入正题
首先按照存储结构我们可以将集合分为两大类,别是单列集合Collection和双列集合Map
1、Collection(集合最大的接口)继承关系
Collection接口有三个子接口分别是List、Set、Queue。
1.1、List:它是按照元素插入顺序进行存放,元素可以重复。
ArrayList:实现list的子类我们最常用的是ArrayList集合,它的特点是查询速度快,但线程不安全底层都是基于数组来存储集合元素,封装了一个动态的Object[]数组,是一种顺序存储的线线性表。
Vector:线程安全,但速度慢,已经被ArrayList代替了。
LinkedList:线程不安全,增删速度快,没有同步方法,本质上是一个双向链表。
1.2、Set:它所存储的元素是不可重复的,并且元素都是无序的。
HashSet:它的底层数据结构是由HashMap来实现的。不保证集合中元素顺序,也不能保证迭代的顺序与插入的顺序一致,是线程不安全。
TreeSet: 有序的存放,线程不安全,可以对Set集合中的元素进行排序,由红黑树来进行排序,TreeSet实际上也是SortedSet接口的子类,其在方法中实现了SortedSet的所有方法,并使用comparator()方法进行排序。
LinkedHashSet:底层由链表实现,按照元素插入的顺序进行迭代,即迭代输出的顺序与插入的顺序保持一致。
1.3、Queue:列队接口
2、Map(它存储的是一个个键值对数据,Map集合中的key不可以重复,每一个key只能映射到一个value)
Hashtable:Hashtable继承Dictionary<K,V>类,实现了Map接口,实现一个key-value映射的哈希表。任何非空的对象都可作为key或者value。是同步的。
HashMap:HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
LinkedHashMap:是HashMap的一个子类,它的输出顺序和输入顺序是相同的,Key和Value都允许空;Key重复会覆盖、Value允许重复;非线程安全;有序。
TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
3、Iteraor接口
(迭代器接口)用于遍历集合中元素的接口,主要包含三种方法:
boolean hasNext()
E next()
void remove()
它的一个子接口ListIterator在它的基础上又添加了三种方法:
void add()
E previous()
boolean hasPrevious()
也就是说如果实现Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历过的元素不会再遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;
而实现了ListIterator接口的集合,可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如List。
4、 Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
Collections是集合框架中的一个工具类。该类中的方法都是静态的。提供的方法中有可以对list集合进行排序,二分查找等方法。通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
5、 Comparable和Comparator 两个接口的区别
当我们要对集合进行排序时,如果集合中的元素是基本数据类型,可以直接调用Collections工具类中的排序方法就好了。但是如果是我们自定义的类型,那就必须要我们去实现Comparable接口中compareTo方法。