【从零开始学Java】学习笔记day021

一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 iterator();用Iterator 变量接收迭代器

迭代器使用步骤:

1 创建集合,加入元素

2 使用Collection接口中的方法iterator,获取迭代器接口的实现类对象

3 使用迭代器对象Iterator接口中的方法hasNext和next遍历集合

迭代器并发修改异常

在使用迭代器遍历集合的过程中,对集合长度进行了修改,迭代器就会抛出并发修改异常

ConcurrentModificationException

解决方案:

        1 遍历集合的同时,不修改集合的长度

        2 Iterator接口有一个子接口叫ListIterator

在ListIterator接口定义了往集合中添加元素的方法

                public interface ListIteratorextends Iterator

                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. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;

你可能感兴趣的:(【从零开始学Java】学习笔记day021)