集合
1 Collection接口
1.1 集合前言
Java语音的Java.util包中提供了一些集合类,这些集合类又称之为容器
提到容器不难想到数组,集合类与数组最主要的不同之处是,数组的长度是固定的,集合的长度是可变的,而数组的访问方式比较单一,插入/删除等操作比较繁琐,而集合的访问方式比较灵活
常用的集合类有LIst集合,Set集合,Map集合,其中List集合与Set集合继承了Collection接口,各个接口还提供了不同的实现类。
1.2 集合概念
集合的英文名称是 Collection,是用来存放对象的数据结构,而且长度可变,可以存放不同类型的对象,并且还提供了一组操作成批对象的方法,Collection接口层次结构,中的根接口,接口不能直接使用,但是该接口提供了添加元素/删除元素/管理元素的父接口公共方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对于List集合和Set集合是通用的。
1.3 集合的继承结构
1.4 Collection方法速查表
2 泛型
2.1概念
我们可以观察一下,下面的代码中有什么元素是我们之前没见过的呢?
其实就是< ? >的部分,它就是泛型
泛型是(Generice) JDK1.5的一个新特性,通常用来和集合对象一起使用
泛型概念非常重要,它是程序的增强器,它是目前主流的开发方式
2.2作用
那泛型有什么作用呢?
我们可以把泛型理解成一个“语法糖”,本质上就是编译器为了提供更好的可读性而提供的一种小手段,小技巧,虚拟机层面是不存在所谓“泛型”的概念的。
我们可以通过泛型的语法定义<>,来约束集合中元素的类型,编译器可以在编译期根据泛型约束提供一定的类型安全检查,这样可以避免程序运行时才暴露BUG,代码的通用性也会更强
泛型可以提升程序代码的可读性,但是他只是一个“语法糖”(编译后这样的部分会被删除,不出现在最终的源码中),所以不会影响JVM后续运行时的性能。
2.3 泛型声明
泛型可以在接口 类 方法上使用
在 方法的返回值前声明了一个,表示后面出息的E是泛型,而不是普通的Java变量
2.4 常用名称
3 List接口
3.1 概述
有序的Collection(也称为序列),此接口的用户可以对列表中的每个元素的插入位置进行精确的控制,用户可以根据元素的整数索引(在列表中的位置)来访问元素,并搜索列表中的元素
3.2 特点
1.元素都有下标
2.数据是有序的
3.允许存放重复的元素
3.3 LIst方法速查表
4 ArrayList
4.1 概述
1.存在Java.util包中
2.内部是用数组结构存放数据,封装数组的操作,每个对象都有下标
3.内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
4.查询快,增删数据效率会低
4.2 创建对象
5 LinkedList
5.1 概述
链表,两端效率高,底层就是链表实现的
5.2 创建对象
LinkedList()构造一个空列表
5.3 常用方法
6 ArrayList扩容
ArrayList相当于在没指定initialCapacity时就是会使用延迟分配对象数组控间,当第一次插入元素时才分配10(默认) 个对象空间。假如有20个数据需要添加,那么会分别在第一次的时候,将ArrayList的容量变为10; 之后扩容会按照1.5倍增长。也就是当添加第11一个数据的时候, Arraylist继续扩容变为10*1.5=15;当添加第16个数据时,继续扩容变为15*1.5=22个
ArrayList没有对外暴露其容量个数,查看源码我们可以知道,实际其值存放在elementData对象数组中,那我们只需要拿到这个数组的长度,观察其值变化了几次就知道其扩容了多少次。怎么获取呢?只能用反射技术了。