集合
-
集合的概念:
- 集合是一个用来存放对象的容器,可以是各种类型,也可自定义对象,并且不限制存放数量
- 集合只是存放的对象的引用,对象本身还是在堆内存中 集合的顶层:
-
iterator:迭代器是集合的顶层接口
集合中(除了map以外)Collection接口也是继承了iterable接口,而在iterable中封装了iterator接口
Collection:
List和set的父接口
- 数组是按位置索引排列,所以查询速度快,增删时,会改变索引值,所以增删效率低
- 链表是按照前后位置存放,查询时需要挨个查找,效率较低,增删时,只需要断开连接链,放入或者移除元素,重新连接即可,对其他元素无影响
List
-
ArrayList:底层是数组结构,可以存储重复元素,有序,查询速度快,增删慢,线程不安全,效率高
-
Veactor:底层数组结构,可以存储重复元素,有序,查询速度快,增删慢,线程安全,效率低–几乎被淘汰
-
LinkedList:底层是链表结构,可以存储重复元素,有序,查询速度慢,增删快,线程不安全,效率高
遍历集合
- 使用迭代器 hasNext next() 方法获取
- 使用for循环获取集合中元素
Set
-
hashSet:底层是数组结构,元素无序,不可重复
-
底层使用了hash算法,在存储元素时,会先调用hashcode方法计算出hash值,然后存储到对应的位置,如果hash值相同,则会equals对象,对象相同时,认为已经存在,不会放入集合中
-
查询时,index = hash(value) 根据计算出的索引查询,所以查询效率高LinkedHashSet:底层结构:链表+hash
查询速度快,元素有序(添加顺序),不可重复 -
TreeSet:底层结构:数组+红黑树
-
自然顺序(排序算法:数字、中文)不可重复
-
适合做范围查询
Map (key-value存储形式,key唯一,value可以重复)
- hashtable:类似hashMap,线程安全,但效率低
- hashMap:不是添加顺序,查询较快
- LinkedHashMap:链表+hash算法,按照添加顺序排序
- TreeMap:红黑树存储结构,自然排序或添加顺序
- map的key就是由Set组成
- 在jdk1.8中,hashMap的数据结构为:数组+链表+红黑树 如果链表的长度大于8,则存储结构变为红黑树
- 如果红黑树中元素太少,也会被修剪或者还原为链表结构