泛型
作用(重点)
将数据类型作为参数进行传递
定义
语法:
<自定义的字母1,自定义的字母2,...>
如:
<k,v>
理解:
可以理解为是数据类型的占位符,没有使用时无法确定其数据类型
使用
在方法上使用
语法
访问权限修饰符 修饰符 <自定义泛型> 返回值类型 方法名(形参列表){
方法体
}
优点:
该方法任何一处使用不确定的数据类型的地方都可以使用该自定义的泛型代替
在类上使用
语法
访问权限修饰符 class 类名<自定义泛型>{
}
优点:
该类任何一处使用不确定的数据类型的地方都可以使用该自定义的泛型代替
在接口上使用
语法
访问权限修饰符 interface 接口名
集合
概念:
存储一组数据类型相同的数据的容器
特点
1,长度可变
2,只能存储引用数据类型
体系结构
collection(接口):所有集合类的顶级接口
List(接口):collection的子接口
ArrayList:Lise的子类
Vector:Lise的子类
LinkedList:Lise的子类
set(接口):collection的子接口
HashSet:Set的子类
LinkedHashSet:Set的子类
TreeSet:Set的子类
Queue(接口):collection的子接口
了解:就是队列(队列:先进先出,栈:先进后出)
需要明白:
1,所有集合类的对象都可以转换为collecion的对象
2,collection提供的方法是所有集合类对象拥有的方法
3,子类对象转换父类对象后不能再使用子类特有属性与方法
List与Set的区别:
List:有序,有下标,数据重复
Set:无序,无下标,数据不可重复
注意:这里的有序指的是存入顺序与取出顺序一致
List提供的方法:
增
void add(int index, E element)
作用:将元素添加到List的指定位置
参数:
index:插入位置
element:添加的元素
boolean addAll(int index, collection<E> c)
作用:将一个集合的数据添加到当前集合指定位置
参数:
index:插入位置
c:添加的集合
删
E remove(int index)
作用:删除指定位置的元素
参数:
index:指定的位置
返回值:
被删除的元素
改
E set(int index, E element)
作用:修改指定位置的元素
参数:
index:指定位置
element:修改后的元素
返回值:
修改前集合中该位置的元素
查
E get(int index)
作用:获取指定位置的元素
参数:
index:指定的位置
返回值:
指定位置的元素
注意:取出元素后,该元素依旧在集合存在
int indexof(object o)
作用:查询元素在集合中的位置
参数:
o:查询的元素
返回值:
元素在集合中的位置
注意:如果查询的元素在集合中不存在,则返回-1
int lastIndexof(object o)
作用:查询元素在集合中最后一次出现的位置
参数:
o:查询的元素
返回值:
元素在集合中最后一次出现的位置
注意:如果查询的元素在集合中不存在,则返回-1
List<E> subList(int fromIndex, int toIndex)
作用:截取集合中一段元素
参数:
fromIndex:开始位置
toIndex:结束位置
返回值:
截取的元素合
注意:
1,截取的元素包含开始位置,不包含结束位置
2,不会影响原集合的数据
set提供的方法
没有提供特有的方法,所有的方法都来自collection
set的特点:
无序,无下标,元素不可重复
常用子类:
HashSet
数据结构:
1.8以前:数组+链表
1.8及以后:数组+红黑树
注意:
HashSet中数据前后顺序是根据储存的对象的hashcode值决定的
存储原理:
存储对象时,先调用对象的hashcode方法,获取该对象的hashcode值,使用该hashcode值与集合中已经存储的对象的hashcode值进行比较,如果不相同,直接存储(在红黑树的结构中),如果有相同,在调用对象的equals方法与相同的对象进行比较,如果不相同,存储到集合中(在数组中储存),如果equals方法结果为true表示相同,那么hashset集合认为两个对象相同,不在存储第二个对象
LinkedHashSet
数据结构:
1.8以前:数组+链表+链表
1.8及以后:数组+红黑树+链表
注意:
LinkedHashSet多出的链表是用来记录数据储存顺序,所以LinkedHashSet是有序的
TreeSet
数据结构:红黑树
注意:
TreeSet储存数据时要么数据拥有比较性,要么创建TreeSet时指定比较器
让数据拥有比较性
就是让出储存的数据所属的类实现Comparable接口
注意:实现Comparable接口就要重写compareTo方法
指定比较器
在创建TreeSet集合时,传入实现了Comparator的接口对象
Collection
提供的方法:
增
add(e);
作用:一次添加一个元素
参数:本次添加的元素
返回值:是否添加成功
addAll(c);
作用:一次添加一个集合数据
参数:本次添加的集合
返回值:是否添加成功
删
remove(o);
作用:删除指定元素
参数:被删除的元素
返回值:是否删除成功
注意:
如果删除的元素,不在集合中,会删除失败
如果集合中存在多个该元素,
removeAll(c);
作用:删除一组数据
参数:被删除的数据
返回值:是否删除成功
注意:
只删除一个元素也算删除成功
删除集合中所有指定的该数据
clear();
作用:清空(将集合中的数据全部删除)
改
查
size();
作用:获取集合长度
boolean contains(o);
作用:判断集合中是否存在指定元素
参数:指定的元素
返回值:是否存在
boolean containsAll(c);
作用:判断集合中是否存在指定的一组元素
参数:指定的一组元素
返回值:是否存在
注意:只有全部包含才返回true
boolean isEmpty():
作用:判断是否为空集合(空集合:集合中没有储存元素)
返回值:是否为空
注意:空集合与空(null)不一样
其他
iterator();
作用:获取迭代器
迭代器提供的方法:
boolean hasNext()
作用:判断集合中是否还有下一个元素
返回值:是否有一个元素
E next();
作用:移动游标到下一个元素,并获取改元素
返回值:获取到的元素
数据结构
栈:先进后出
队列:先进先出
数组:
特点:
在内存中连续开辟一片空间,所以在寻找数组中素有数据计算机一次遍历内存即可,所以查询速度快
但是因为所以数据在同一片区域,此时如果给其中插入或删除一个数据,那么后面的数据位置都将需要修改,所以增删速度慢
链表:
单链表:
特点:前一个数据中储存下一个数据的位置
双链表:
特点:前一个数据中储存上一个与下一个数据的位置
红黑树:
特点:左叉,右叉,节点
别名:二叉树