容器类分为两种,collection和map,collection接口又分两个子类型,list和set以及list,set,map等一些具体实现类
链表和数组区分:
物理结构:链表与数组都属于线性表,从物理结构上来讲,链表属于链式存储结构,称为链表,数组属于顺序存储结构,称为数组,由于两种结构不同,所以数组是逻辑相邻物理也是相邻的,而链表则是逻辑项链但是物理不要求相邻,所以链表一般有两种存储域,一种是存储数据本身的数据域,一种是存储指向下一元素位置的指针域,最后一条数据没有下一个指针则为null;
元素的存取方式不同:存取的话数组可以直接通过元素索引确定位置进行存取,但是链表则需要遍历才能确定位置,所以数组顺序更快;
元素的插入和删除方式不同:插入和删除对于数组来说处理起来的方式是需要移动数组元素位置,以保证数组元素的排序,对于链表来说插入和删除不需要保证数组元素顺序,但是删除过程中需要遍历,所以基本上两者速度基本上一致
list:list是由collection扩展出来的一个接口,它是一个允许重复的有序集合,以下是介绍一下常用的三种list实现类;
1.ArrayList:ArrayList是由数组作为底层的一种实现类,这个数组是可以动态创建的,在底层代码中ArrayList是初始定义一个数组长度,当添加时list长度超过数组长度,则新创建一个更大的数组,然后将原来的数组数据全部复制到新数组中,Vector与ArrayList基本一致,但是vector是线程安全的;
2.LinkedList:LinkedList是由链表作为底层的实现类,根据上述的数组和链表的区别来说,所以LinkedList与ArrayList最大的区分就是ArrayList存取速度更快,而插入和删除理应来说两者速度应该相同,但是由于ArrayList有一个动态创建数组的动作,需要判断数组长度,所以插入删除LinkedList更快;
set:set是由collection扩展出来的一个接口,它是一个不允许重复的无序集合,以下是介绍一下常用的三种set实现类,散列集HashSet,链式散列集LinkedHashSet,树形散列集TreeSet
1.HashSet:是实现set的一个具体类,无序,不可重复;
2.LinkedHashSet:LinkedHashSet是由一个链表实现扩展的HashSet类,它支持有序,可以按照插入的顺序进行排序
3.TreeSet:TreeSet是一个有序的set,它的底层是一个树形结构,这样可以给TreeSet进行一个有序的排序,并且TreeSet可以根据值的大小进行排序,并不是按照插入顺序进行排序;
map:常用的map实现类有HashMap,LinkedHashMap,TreeMap,LinkedHashMap也是通过链表拓展成有序集合,TreeMap也是通过红黑树结构对值进行一个排序
1.HashMap:采用数组+链表实现,在1.8之后,当链表长度超过阀值(8)的时候,HashMap会转成数组+链表+红黑树的结构从而大大提高效率,HashMap特点是无序,key值不可以重复,ConcurrentHashMap与HashTable都是线程安全的,但是从效率上来说ConcurrentHashMap比HashMap效率要高;