zoukankan      html  css  js  c++  java
  • 算法跟数据结构的入门

    什么是算法

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

      算法的设计原则:正确性,可读性,健壮性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,其中的元素只有当其指定的延迟时间到了,

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

             

     参考子龙老师的课件

  • 相关阅读:
    linux基础_第一篇_IT运维介绍
    Java实现文件分割和文件合并实例
    dotweb——go语言的一个微型web框架(三)路由注册
    dotweb——go语言的一个微型web框架(二)启动dotweb
    dotweb——go语言的一个微型web框架(一)
    Linq的查询操作符
    dsfgdfg
    .NET Entity Framework (with Oracle ODP.NET) -Code First
    .NET Entity Framework (with Oracle ODP.NET)
    ODP.NET 之 ExecuteNoQuery 执行 Merge into 返回值
  • 原文地址:https://www.cnblogs.com/xining/p/11634474.html
Copyright © 2011-2022 走看看