单列集合与双列集合的特点以及数据结构
单列集合
Collection接口下的两个接口
List接口:
特点:有序(有序指的是存储的顺序与取出来的顺序是一样的)、元素可重复、有索引。
数据结构:底层数据结构是数组。
Set接口:
特点:无序(无序指的是存储的顺序与取出来的顺序是不一样的)、元素不能重复,无索引。
数据结构:哈希表。
是如何保证数据唯一的:先比较hashCode值,如果hashCode值不一样就存储,如过hashCode值一样就用equals再次判断,如果equals判断的值不一样就存储,一样就不存储。
哈希表存储机制看下图:jdk1.8及其以后哈希表由(数组+链表+红黑树)组成
List接口下的两个实现类:
ArrayList:
特点:有序(有序指的是存储的顺序与取出来的顺序是一样的)、元素可重复、线程不同步、有索引。
数据结构:底层数据结构是数组、查询快,增删慢。
LinkedList:
特点:有序(有序指的是存储的顺序与取出来的顺序是一样的)、元素可重复、有索引。
数据结构:链表结构>>>双向链(prev前指针域 e参数 next后指针域)、增删快、查询慢
LinkedList中的add方法添加元素源码介绍:
Set接口下的三个实现类:
HashSet:
特点:无序(无序指的是存储的顺序与取出来的顺序是不一样的)、元素不能重复、无索引。
数据结构:哈希表。
方法功能实现:HashSet方法的功能实现是基于HashMap实现的。
保证数据唯一性:hashCode 和 equals
LinkedHashSet:
特点:有序(有序指的是存储的顺序与取出来的顺序是一样的)、元素不能重复、无索引。
数据结构:哈希表+链表>>>双链表(prev前指针域 e参数 next后指针域)双向链可以保证存储有序
保证数据唯一性:hashCode 和 equals
TreeSet:
特点:自动按照自然顺序排序还可以使用带参构造传入Comparator指定排序规则、无索引
数据结构:红黑树
保证数据唯一性:hashCode 和 equals
双列集合
Map接口下的三个实现类
特点:以 key:value 的形式存储数据、无索引、无序、键不能重复、值可以重复。
数据结构:哈希表。
如何判断数据唯一:是如何保证键唯一的:键需要重写HashCode和equals 判断过程和HashSet一样。
注意:Map的键和值是可以存储null的。
HashMap:
具有父类的所有特点。
LinkedHashMap:
特点:有序的 、具有父类的所有特点。
数据结构:哈希表 + 链表>>>双向链(prev前指针域 e参数 next后指针域)。
TreeMap:
特点:按照自然顺序排序。
数据结构: 红黑树结构 (效率高)
构造方法:
空参构造>>>可以针对key进行自然排序。
带参构造>>>在有参构造中传入Comparator对指定规则排序。