集合
一.集合概念:
对象的容器,实现了对对象常用的操作,类似数组功能。
二.集合和数组的区别:
- 数组长度固定,集合长度不固定
- 数组可以存储基本类型和引用类型,集合只能存储引用类型
三.collection体系
常用方法
add()//添加
remove()//删除
size()//实际元素大小
contains()//是否包含某元素
1.List容器
(一).特点
- 有序的
- 有索引
- 允许重复
(二).List集合实现类特点
- ArrayList:数组结构,开辟的必须是连续的空间,查询快,增删慢(重点)
- LinkedList:链表结构,开辟的可以是不连续的空间,查询慢,增删快(重点)
- vertor:数与ArrayList差不多,但由于线程同步,运行速率慢(了解)
(三).ArrayList扩容机制
- 初始化:ArrayList数组首先对传进来的初始化参数initalCapcity(初始容量)进行判断,如果没给参数,当没有向集合中添加任何元素,容量为0,添加元素后,初始化容量为10.
- 扩容时机:当数组大小大于初始容量的时候,就会进行扩容,扩容为原来的1.5倍
- 扩容方式:会将原数组拷贝到一个新数组里,修改原数组指向新数组,原数组被抛弃,会被GC回收
2.Set容器
(一).特点
- 无序的
- 无索引
- 不可重复
(二).Set集合实现类特点
- HashSet:无重复,存储快,底层是哈希表
- LinkedHashSet:
- treeSet:
四.Map集合
(一).几种常见map的实现类
- HashMap:(重点)
非线程安全,允许空键值,执行效率相对较高(底层使用的数据结构是数组+链表+红黑树(jdk8)或者数组+链表(jdk7))。 - Hashtable:
线程安全,不允许空键值,执行效率相对较低(推荐使用ConcurrentHashMap)。 - TreeMap:
如果需要使用有序的集合,推荐用TreeMap。