Collection
容器 集合
之前学过的容器:数组
弊端:只能存指定数据类型
数组的长度不可变
collection容器中分为List Set Map三类
List 接口
实现类:ArrayList LinkedList Vector
List常用方法
add | list.add(element) 将element添加到list当中 element可以是字符串、null、double等类型包括list等 list.add(index,element) 该方法表示在index下标插入element元素,其他元素向后移 index范围:[0,list.size()]超出这个范围就会报数组越界一异常 | |
addAll | list.addAll(a) a容器中的所有元素都添加到list当中 | |
get | list.get(index) 获取index下标中的元素 | |
set | list.set(index,element) 将index下标中的元素换成element | |
contains | list.contains(element) 搜索list容器中是否包含element元素,若是包含返回true,否则返回false | |
indexOf | list.indexOf(element) 搜索list容器中是否包含element元素,若是包含返回下标,否则返回-1 | |
containsAll | list.containsAll(a) 搜索容器a中的元素是否全都出现在list容器中,若是都包含返回投入,否则返回-1 | |
remove | list.remove(object) list.remove(index) 参数传入对象时,删除这个元素,返回boolean类型 参数传入下标时,删除下标位置的对象,返回被删除的对象 若参数存在多个,删除找到了第一个 若想删除的对象时整数时,需要将整数强制类型转换成Integer类型 | |
size | list.size() 返回list的长度 |
遍历list数组的方式
根据list.size()遍历
foreach遍历
iterator迭代器遍历
ArrayList扩容方式
ArrayList初始容量为10
当添加新元素超过初始容量时,需要扩容
将初始容量扩为原来的1.5倍
ArrayList和LinkedList性能比较
ArrayList是通过数组存储数的,查找数据非常快
LinkedList查找速度慢,通过双向检索的方式优化检索速度
ArrayList插入删除慢
LinkedList插入删除块
内部类
在类的内部编写的类叫做内部类,被嵌套的类成为内部类(inner class),嵌套其他类的类成为外部类(outer class)
内部类可以分为:静态内部类、成员内部类、局部内部类、匿名内部类
静态内部类
静态内部类是定义在类里面的类,用static修饰
不需要依赖于外部类,不能使用外部类的非static成员变量和方法
静态内部类中既能声明静态成员也可以声明非静态成员
其他类使用内部类
成员内部类
成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成 员)
成员内部类需要依赖于外部类,如果要创建成员内部类的对象,必须存在一个外部类的对 象。在外部类访问内部类的时候必须先实例化外部类对象
可以使用四种权限修饰符修饰
成员内部类中不能书写静态变量和方法
同名的属性名/方法名访问外部类时——>外部类.this.成员名
方法内声明成员内部类
局部内部类
编写在方法的内部的类称之为局部内部类,也可以成为方法内部类
与成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
局部内部类不可以使用权限修饰符、static进行修饰,同局部变量相同
局部内部类可以直接访问方法中的属性
局部内部类可以直接访问方法外部类中属性和方法
局部内部类创建对象要在方法内部 局部内部类的外部声明
匿名内部类
匿名内部类没有类名,其他都具备
匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。
一个匿名内部类一定是在new后面,用其隐含实现一个接口或实现一个类
函数式接口
有且仅有一个抽象方法的接口
函数式接口即可以适用于Lambda使用的接口
可以用注释@FunctionalInterface检查接口是否是函数式接口
Lambda表达式是一种可传递的匿名函数,可以作为参数传递给方法或存储在变量当中。
代码块
static{
静态代码块:一个类的静态代码块在程序运行期间只会执行一次
加载类对象的时候执行
}
{
成员代码块:每一次new对象执行
成员代码块在构造方法之前运行
}