一Collection集合
数组:引用类型,可储存多个元素,长度不可变,可以储存基础数据类型和引用数据类型
集合:引用类型,可存多个元素,长度可变,只能存储引用数据类型
集合继承体系
ArrayList extends List,LinkedList extends List
HashSet extends Set,LinkedHashSet extends Set
List extends Collection,Set extends Collection
Collection常用方法
public boolean add(E e);增
public boolean remove(E e);删
public boolean contains(Object obj);查询是否包含obj
public boolean isEmpty() :判断是否为空。
public int size() :获取集合的长度
public Object[] toArray() :把集合中的元素存储到数组中
public void clear() :清空
二Iterator迭代器:通用的从集合中取出元素的方式
Iterator常用方法
public boolean hasNext();是否有元素
public E next();返回集合中下一个元素
利用Collection内的iterator获取集合的Iterator迭代器
Iterator
迭代器使用步骤:
1 创建集合,加入元素
2 使用Collection接口中的方法iterator,获取迭代器接口的实现类对象
3 使用迭代器对象Iterator接口中的方法hasNext和next遍历集合
迭代器并发修改异常
在使用迭代器遍历集合的过程中,对集合长度进行了修改,迭代器就会抛出并发修改异常
ConcurrentModificationException
解决方案:
1 遍历集合的同时,不修改集合的长度
2 Iterator接口有一个子接口叫ListIterator
在ListIterator接口定义了往集合中添加元素的方法
public interface ListIterator
void add(E e) 迭代器中往集合添加元素的方法
void remove() 删除的是next方法取出的元素
增强for循环的格式:
for(集合|数组中元素的类型 变量名 : 集合名|数组名){
sout(变量名);
}
三泛型
泛型:可以在类或方法中预知地使用未知的类型。
定义和使用含有泛型的类:模拟ArrayList集合
当我们不知道使用什么类型的时候,就可以使用泛型,是一个未知的数据类型
可以给泛型赋值任意的数据类型:Integer,Student,Person,String...
定义格式:
public class 类名<泛型>{
类中使用数据类型的地方,都可以使用类上定义好的泛型
}
什么时候确定类上泛型的数据类型
创建对象的时候,确定类上泛型的数据类型;对象使用什么类型,类的泛型就是什么类型
定义和使用含有泛型的方法
泛型需要定义在方法的修饰符和返回值类型之间
定义格式:
修饰符<泛型> 返回值类型 方法名(参数类型-->使用泛型){
方法体;
}
什么时候确定泛型的数据类型:
调用方法,传递的参数是什么类型,方法的泛型就是什么类型
含有泛型的接口:第一种使用方式
定义一个类,实现含有泛型的接口,在实现接口的同时,指定接口泛型的数据类型
含有泛型的接口:第二种使用方式
定义类实现含有泛型的接口,接口使用什么泛型,实现类就使用什么泛型
实现类跟着接口走,就和定义一个含有泛型的类是一样的
泛型的通配符
?:代表可以接收任意的数据类型
?已经由java定义好了,我们可以直接使用
泛型的通配符只能作为方法参数的数据类型使用,不能创建对象作为数据类型使用
泛型通配符的高级使用
泛型的通配符: ? 代表可以接收任意数据类型的数据
泛型的上限限定: ? extends E==>传递的未知类型?只能使用E的子类或者是E本身
泛型的下限限定: ? super E==>传递的未知类型?只能使用E的父类或者是E本身
四常见数据结构初识
栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,
不允许在其他任何位置进行添加、查找、删除等操作。
队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端
进行插入,而在表的另一端进行取出并删除。
数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。查找元素快,增删元素慢
链表:linked list,由一系列结点node(链表中每一个元素称为结点)组成,结点可以在运行时动态
生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指
针域。查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
增删元素快
树具有的特点:
1. 每一个节点有零个或者多个子节点
2. 没有父节点的节点称之为根节点,一个树最多有一个根节点。
3. 每一个非根节点有且只有一个父节点
二叉树
如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树。
红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构,它是在1972年由Rudolf
Bayer发明的,当时被称之为平衡二叉B树,后来,在1978年被Leoj.Guibas和Robert Sedgewick修改为
如今的"红黑树"。它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色,可
以是红或者黑;
红黑树不是高度平衡的,它的平衡是通过"红黑树的特性"进行实现的;
红黑树的特性:
1. 每一个节点或是红色的,或者是黑色的。
2. 根节点必须是黑色
3. 每个叶节点(Nil)是黑色的;(如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为
Nil,这些Nil视为叶节点)
4. 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;