tushao
不忘初心,无限更新流学习单位,总结每日学习资料,总结写代码中遇到的问题

泛型通配符
什么时候使用泛型通配符
使用泛型类或者泛型接口的时候,泛型的数据类型不确定就使用通配符
符号:<?>
注意:一旦使用了通配符泛型,那么就只能使用Object里面通用的方法。
|
通配符的基本使用
1.通配符一般是写在方法形参里面的,当我们调用此方法的时候,无论集合中泛型写的是什么,集合对象都能当做方法的实参传入,如果方法里面的<>写的具体的泛型,那么调用方法传参的时候只能传入对应的实参集合对象。不能传入任意对象。
|
使用通配符注意事项
1.不能创建对象使用,只能当做方法形参。
2.当我们把方法形参里面泛型设置为通配符,那么在调用方法的时候实参就可以传入任意的数据类型的集合对象,值得注意的是,当一个方法的形参定义为通配符,那么该方法内部不能做添加操作,只能接收其他的集合。
||||||||||||||||
||||||||||||||||
||||||||||||||||
泛型上下限
目的:保证安全性
|
泛型上限
格式:类型名称<?extends 类名> 对象名
上限意思:传入对象的时候只能传入本身或者它的子类
|
泛型下限
下限格式:类型名称<? super 类名> 对象名
意思:能接收该类以及他的父类。
||||||||||||||||||
||||||||||||||||||
||||||||||||||||||
数据结构用处
作用
数据结构作用:组织存储数据的一种方式,ArrayList是一个无限扩充的数组,LinkeLlist就是一个链表。
现实世界中存储数据,我们要通过一些工具或者建模进行存储,每种数据结构都有自己的特点。算法就是在很哈哈哈多数据实现快速的增删改查。
java是一种面向对象的编程语言。相当于自动挡,C语言相当于手动挡。java中的数据结构就相当于变速箱的工作原理,不懂数据结构原理,那么有时候出现问题你自己就解决不了。懂得数据结构,你就能提高性能,做出修改,完美使用。
算法:一堆循环和判断语句
算法目的:提高计算效率
|
常见的数据结构
数据结构:栈,队列,数组,链表和红黑树
|

1.栈 static又称堆栈,他是运算受限的线性表结构,他的限制仅允许在标记的一端进行操作,不允许在其他任何位置进行添加,查找,删除等操作。
|
元素进出特点
元素先进后出(类似于子弹压弹夹)
进、出口都在栈的顶端位置。
顺序:陷进去的数据在下面,后进去的数据在上面。
压栈:往栈里面存入元素
弹栈:从栈里面取出元素
空栈:里面没有元素,可以认为栈底和栈顶重合。加入数据之后就不再重合。
栈顶:在最上面元素的上面,会因为压栈和弹栈发生变化
栈底:栈空间最下面
|
队列
元素先进先出,存进去的元素要在前面的元素依次取出之后才能取出该元素。
入队:往队里里面存入数据
出队:往队列里面取出数据
队尾:存数据入口
队头:取数据出口
|
数组结构(增删慢,查找快)
数组:Array,是有序的元素序列,数组是在内存当中开辟的一段【连续】空间,并在这些空间内存储元素。找对应的数据元素是找内存空间的编号。
|
数组元素存取特点
1.查找元素快:他是同归元素编号来查的(索引)
2.增删元素慢:是真的超级慢
a.增加:先构建一个新数组,先把要插入的数据加入相应的位置,再使用System.arrayCopy方法,实现元素组复制到新数组。
b.删除:删除某一个位置的元素,也需要创建一个向数组,把原数组当中的元素根据索引复制到新数组对应位置。被删除未知不赋值到新数组当中。
|
链表结构:(增删快,查找慢)
链表:linked list结构:由一系列【节点node】,链表当中的每个元素称为节点,节点可以在运行时动态生成,常用的有单向列表和双向链表,
|
单向链表
每个节点包含两个部分:一个用于存储数据元素的数据域,另一个是用来存储下一个节点地址的指针域。比如第一个节点包含了他本身数据还有指向下一个节点的地址。最后一个节点地址位置置null。head为头部,tall为尾部。

单向列表:一条链子,不能保证元素顺序,所以不能保证传入和取出顺序一致。

单向列表只有两个:数据 下一个节点地址
|
双向链表
双向链表:两条链子,一条链子专门记录元素顺序。是一个有序的集合。

双向列表就是增加了一个对自己地址的保存 自己地址 数据 下一个节点地址

双向列表增加:加入一个,把自己的地址赋值给上一个节点,并且后面跟上下一个节点的地址

双向列表删除:删除一个,上一个节点的尾地址改变,下一个节点的首地址改变

双向列表查询很慢:因为地址不是连续的,查询很慢的,需要通过连接的节点依次查找连接元素,每次都必须从头开始查
|
红黑树
二叉树:binary tree:每个节点数不超过2的树,类似于生活中树的结构,只不过每个节点最多只能有两个子节点

顶上为根节点,左侧称为左子树,右边为右子树

在二叉树中有一种比较特殊的树叫【红黑树】,
|
红黑树约束:

1.节点可以是红色或者黑色

2.根节点是黑色

3.叶子节点是黑色

4.每个红色节点的子节点都是黑色的

5.任何一个节点到其每一个子节点的所有路径黑色节点数相同
|
红黑树特点
查询素的超级快,并且,查找叶子元素最小和最大不能超过两倍。
|
List集合
List集合
1.继承自Collection接口
2.允许重复元素
3.有序,存取元素顺序相同
4.元素都是以线性方式存储
|
List接口常用API方法:主要是操作带索引的方法。赋值索引越界
1.collection中所有方法

2.public void add(int index,E e);把元素加到指定位置

3.public E get(int index);返回指定位置的元素

4.public E remove(int index);返回删除的元素

5.public E set(int index ,E e);指定位置替换为指定元素,并且返回更新前的元素
|
List集合子类
ArrayLis类:增删慢,查询很快(底层是数组)
LinkedList类:增删快,查询慢,主要针对首尾操作
|
LinkedList方法

  • public void addFirst(E e);将指定元素加到首节点位置。
  • public void addLast(E e);将指定元素插入得到尾节点
  • public E getFirst();获取首节点元素
  • public E getLast();获取尾节点元素
  • public E removeFirst();删除首节点元素
  • public E removeLast();删除尾节点元素
  • public E pop();从此列表所表示的堆栈中弹出一个元素
  • public E push(E e);将元素插入到此列表所表示的堆栈中
  • public boolean isEmpty();如果不包含任何元素则返回true
posted on 2020-12-02 19:49  是涂绍啊  阅读(182)  评论(0编辑  收藏  举报