zoukankan      html  css  js  c++  java
  • 2020.12.02,泛型通配符,上下限,数据结构,List集合

    泛型通配符
    什么时候使用泛型通配符
    使用泛型类或者泛型接口的时候,泛型的数据类型不确定就使用通配符
    符号:<?>
    注意:一旦使用了通配符泛型,那么就只能使用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
  • 相关阅读:
    随机生成一份试卷,试卷的种类分为单选、多选、判断三种题型。nodejs6.0 mysql
    git 常用命令
    ECMAScript 继承机制实现
    javascript正则表达式
    利用javascript实现二维数组的筛选
    iframe引入百度地图显示企业位置
    前端开发APP,从HBuilder开始~
    js闭包理解
    Python多线程threading与多线程中join()的用法
    Python中的装饰器
  • 原文地址:https://www.cnblogs.com/tushao/p/14075996.html
Copyright © 2011-2022 走看看