算法跟数据结构的入门

什么是算法算法

  算法的五个特征:有穷性,肯定性,可行性,有输入,有输出数组

  算法的设计原则:正确性,可读性,健壮性bug/高效率与低存储。内存+cpu内存占用最小。缓存

  评价算法的两个重要指标:时间复杂度(运行一个程序花费的时间),空间复杂度(运行程序所须要的内存 OOM 通常就是找数组容器等)。安全

    1.常数性时间复杂度0(1)数据结构

     及运行代码:多线程

      

 

     2.线性性0(m)并发

    

      线性性O(m)高并发

      

 

 

    3.性能

      对数性 nlog(n) 快速排序优化

      

 

     4.

     

    平方性

      

 

     5.

 

    时间复杂度优化标准就是:尽可能往低的优化,通常在程序中找for while 递归等就能大概算出时间复杂度

    以上几个性能对比:O(1)>O(n)>O(nlogn)>O(n^2)

什么是数据结构

    数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。一般状况下,精心选择的数据结构能够带来更高的运行或者存储效率。

  基础数据结构

    1.数组

    元素之间能够快速的随机访问

    每一个元素都必须是连续的,当须要扩容时,就须要将已有的数据复制到已有的存储空间

    ArrayList:使用最多的数据结构,访问快,线程不安全

    Vector:线程安全,通常用在高并发系统中

    2.链表

    不能够随机访问  插入删除快

    LinkedList:不能随机访问

    

    3.Vector,LinkedList,ArrayList三者的区别

    性能上来讲,ArrayList最好,也是使用最多。

    当集合中的元素须要频繁的插入删除的话  能够考虑使用LinkedList   

    Vector是线程同步的,因此性能最差,可是安全性最高,通常用于高并发

 

    

      若是能用数组的时候(元素类型固定,数组长度固定),请尽可能使用数组来代替List 

      若是没有频繁的删除插入操做,又不用考虑多线程问题,优先选择ArrayList 

      若是在多线程条件下使用,考虑Vector 

      若是须要频繁地删除插入,LinkedList 

      若是不清楚的状况下ArrayList 

    

     Set

 

    Set用来去重

 

    Set Java里面有3种实现方式

 

    (1)HashSet 就是用来去重的 并且去重后元素的顺序和插入的不同的

 

    (2)TreeSet 是用来排序的,其底层数据结构为红黑树 元素的顺序和插入的不同的

 

    (3)LinkedHashSet 维护了一个链表,记录了顺序,能够保持插入和输出后的顺序一致

 

 

 

    队列

 

    队列在项目中使用很是普遍主要有如下一些场景:

 

    (1)等待队列

 

    (2)//排队场景 若是一个系统流量高 要作这种排队系统

 

    (3)//Mq消息队列

 

      Java中有不少种队列的实现方式,大部分状况下只须要掌握如下几个:

 

        ArrayBlockingQueue:基于数组的阻塞队列实现,也长度是须要定义的,能够指定先讲先出或者先讲后出,是有界队列,在多线程池中的等待队列就就用了这种。

 

 

 

        LinkedBlockingQueue:基于链表的阻塞队列,〈该队列由一个链表构成),

 

        其内部实现采用分离锁(读写分离两个锁),从而实现生产者和消费者操做的彻底并行运行,是无界队列。

 

        PriorityBlockingQueue:基于优先级的阻塞队列(排队场景比较适合,具体实现看代码例子)

 

        DelayQueue:带有延迟时间的Queue,其中的元素只有当其指定的延迟时间到了,

 

        才可以从队列中获取到该元素。应用场景主要有:缓存超时的数据进行移除、空闲链接的关闭等等。

 

         

 

 参考子龙老师的课件

相关文章
相关标签/搜索