个人学习笔记(java)2

首先声明本文均为个人学习笔记,可能会有所差错,

如果发现错误请大佬们在评论区指正,多谢[抱拳.jpg]

数据结构(栈)

特点:后进先出,先进后出

          数据进入栈模型的过程称为:压/进栈 或 弹/出栈

数据结构(队列)

特点:先进先出,后进后出

           数据从后端进入队列模式的过程称为:入队列

           数据从前端离开队列模式的过程称为:出队列

数据结构(数组)

特点:

查询速度快:查询通过地址值和索引定位,查询任意数据耗时相同

删除效率低:删原始数据,同时需要后面数据前移

添加效率极低:添加位置后的每个数据后移,再添加元素

数据结构(链表)

前一个节点记录后一个节点的地址

注:链表中的结点是独立的对象,在内存中不连续,

每一个节点包含数据值和下一个结点的地址

缺点:链表查询速度慢,因为无论查询那个数据都需要从头开始找

优点:链表增删相对快

ex:假设需要在结点1和结点2中间添加一个结点3

那么只需要将结点3后面的地址改为结点2的地址值,并且将

结点1的地址改为结点3的地址值

        如果要删除结点3则只需要将节点1的地址指向结点2或者结点n然后删除结点3

数据结构(树)

关于树的一些定义:

度:每一个节点的子节点称之为度,在二叉树中任意节点的度<=2

树高:树的总层树称之为树高

根节点:最顶点的节点

左子结点:左下方的节点 

右子节点:右下方的节点

数据结构(二叉查找树)

二叉查找树,又称为二叉排序树或者二叉搜索树

① 每一个节点上最多有两个子节点

②任意节点左子树上的值都小于当前节点

③任意节点右子树上的值都大于当前节点

添加节点规则:小的存左边,大的存右边,一样的不存

数据结构(二叉树)前序遍历

从根节点开始,然后按照当前节点,左子结点,右子节点的顺序遍历

中序遍历

从最左边的子节点开始,然后按照左子结点,当前节点,右子节点的顺序遍历

后序遍历

左子结点——>右子节点——>当前节点

层序遍历

一层一层遍历

ArrayList集合底层原理

 1.使用空参创建的集合,在底层创建一个默认长度为0的数组

2.添加第一个元素时,底层会创建一个新的长度为10的数组

3.存满时,会扩容1.5倍

4.如果一次性添加多个元素,在原先的1.5倍长度也存储不下时,则新创建数组的长度,以实际为准。 ex:假设n(n>15)条数据同时插入,则长度就是 n+10 

LinkedList集合底层原理和迭代器底层原理

额这个还没有总结好以后再发[抱歉.jpg]

泛型深入

泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查

泛型格式:<数据类型>

注:泛型只能支持引用数据类型 ex:Integer Boolean String

好处:1、统一了数据类型

           2、把运行时期的问题提前到了编译期间,避免了强制类型转换

                可能出现的异常,因为在编译阶段就能确定下来。

注:1.泛型中不能写基本数据类型

       2.指定泛型的具体类型后,传递数据时,可以传入该类型或子类类型

ArrayList<Animal> list = new ArrayList<>();
list.add(new Animal());
list.add(new Dog());
list.add(new Cat());

        在上述代码中Dog类和Cat类均为Animal类的子类类型所以可以添加到泛型为<Animal>的list中

        3.如果不写泛型,则默认为Object类型(几乎不会这样)

泛型的三种形态

一、泛型类

①使用场景:当一个类中,某个数量的数据类型不确定时,就可以定义带有泛型的类

格式: 修饰符   class   类名<泛型类型>{

}

public class ArrayList<E>{
}

二、泛型方法

②方法中形参类型不确定时,可以使用类名后面定义的泛<E>

格式: 修饰符 <泛型类型> 数据类型 方法名 (类型 变量名){

}

public <E> boolean add(E e){
}

方法中形参类型不确定时

法一:使用类名后面定义的泛型         所有方法都可以使用

法二:在方法申明上定义自己的泛型        只有本方法可以使用

三、泛型接口

格式:修饰符 interface 接口名<类型>{

}

public interface List<E>{
}

如何使用?

法一:实现类给出具体类型

ex:        public class 接口名 implements List<String>{

             重写List接口中所有的抽象方法;

             }

法二:实现类延续泛型,创建对象时再确定

ex:        public class 接口名<E> implements List<E>{

             重写List接口中所有的抽象方法;

             }   

泛型的继承和通配符

·泛型本身不具备继承性,但是数据具备继承性

package a03mygenerics;

import java.util.ArrayList;

public class GenericsDemo3 {
    public static void main(String[] args) {
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();
        method(list1);
        method(list2);
        method(list3);
    }
    /*
    此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。
    写<E>的弊端:
        利用泛型方法有一个小弊端,此时他可以接受任意的数据类型
           Ye Fu Zi student
    希望:本方法虽然不确定类型,但是以后我希望只能传递Ye Fu Zi

    此时我们就可以使用泛型的通配符:
     ?也可以表示不确定的类型
     他可以进行类型的限定
     ? extends E:表示可以传递E或者E所有的子类类型
     ? super E:表示可以传递E或者E所有的父类类型
     应用场景:
     1.如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。
     2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以泛型的通配符
     泛型的通配符:
        关键点:可以限定类型的范围。
     */
    public static void method(ArrayList<? extends Ye> list){

    }


    class Ye{

    }
    class Fu extends  Ye{

    }
    class Zi extends Fu{

    }

}

此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。
写<E>的弊端:
    利用泛型方法有一个小弊端,此时他可以接受任意的数据类型
       Ye Fu Zi student
希望:本方法虽然不确定类型,但是以后我希望只能传递Ye Fu Zi

此时我们就可以使用泛型的通配符:
?也可以表示不确定的类型
他可以进行类型的限定
? extends E:表示可以传递E或者E所有的子类类型
? super E:表示可以传递E或者E所有的父类类型
应用场景:
1.如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。
2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以泛型的通配符
泛型的通配符:
    关键点:可以限定类型的范围。

           

泛型深入·总结

1.什么是泛型?

JDK5引入的特性,可以编译阶段约束操作的数据类型,并进行检查

2.泛型的好处?

统一数据类型

把运行时期的问题提前到了编译期间,避免了强制类型转换

可能出现的异常,因为在编译阶段类型就能定下来

3.泛型的细节? 

泛型中不能写基本数据类型只能是引用数据类型 ex:String Integer Boolean等

指定泛型的具体类型后,传递数据时,可以传入该类型和它的子类类型

如果不写泛型,那么类型默认是Object

4.哪里定义泛型?

泛型类:在类名的后面定义泛型,然后创建该类对象的时候,确定泛型类型

泛型方法:在修饰符后面写泛型类型定义方法,调用该方法时,确定泛型类型

泛型接口:接口名后面定义泛型,由它的实现类确定泛型类型或者实现类延续泛型

5.泛型的继承和通配符

泛型本身不具备继承性,但是它的数据具备继承性

泛型的通配符:?(表示不确定泛型类型)

?extend E:表示可以传递E或者E所有的子类类型

?super E:表示可以传递E或者E所有的父类类型

6.使用场景

在我们定义类、方法、接口的时候,如果我们不能确定具体类型,那么我们就可以定义泛型

在我们定义泛型方法时,形参中如果不能确定类型,但是我们知道是哪个父类的子类那么我们就可以使用泛型的通配符? extends 父类类名

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值