首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript秘密笔记 第四集

循环体: 循环反复执行的代码段 死循环: 循环条件永远满足,导致循环无法自动退出 如何: 3种: 1. while循环: 声明并初始化循环变量; while(循环条件){//只要/当...的时候...); 何时: 即使循环条件不满足,也至少能执行(试)一次时 while vs do while 当第一次循环条件都满足时,两者完全相同 只有第一次循环条件不满足时,差别: while是一次都不执行...do...while是至少可以执行一次 3. for循环: 简化版的while循环: for(声明并初始化循环变量;循环条件; 修改循环变量){ 循环体 } 局限: 只能在循环体执行后,才修改循环变量的值...创建: 3种: 1. 创建一个空数组: var 数组名=new Array() 可简化: var 数组名=[]; 何时: 只要创建数组时,暂时不知道数组的内容 2....不限制下标越界 ***数组是引用类型的对象: 什么是对象: 内存中存储多个数据的一块独立存储空间 什么是引用类型: 值无法保存在变量本地的数据类型 实际数据都存储在window之外的独立对象(存储空间

81920

java基础知识总结(绝对经典)

switch(变量){ case 值:要执行的语句;break; … default:要执行的语句; } 工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了...3)、当某些语句需要执行很多次时,就用循环结构。 while和for可以进行互换。 区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。...要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。 continue:只作用于循环结构,继续循环用的。 作用:结束本次循环,继续下次循环。...主函数: 1)、保证该类的独立运行。 2)、因为它是程序的入口。 3)、因为它在被jvm调用。 函数定义名称是为什么呢? 答:1)、为了对该功能进行标示,方便于调用。...注意:主函数的存在,仅为该类是否需要独立运行,如果不需要,主函数是不用定义的。 主函数的解释:保证所在类的独立运行,是程序的入口,被jvm调用。

65500
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LeetCode和面试中的常客,巧妙的两指针算法

    不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢?...使用两重循环,一重循环判断是否和val相等,另外一重循环移动数组,将当前元素覆盖掉。我们前面说了,由于数组的内存是连续的,当我们想要删除元素的时候,复杂度比较大是 O(n) 。...顺着这个思路出发,最外层的循环用来遍历元素是否满足删除的条件,这个看起来不太能优化,所以能够想办法松动一下的就只有里面这层循环了。我们需要这一层循环的原因是为了移动数组,将要删除的元素覆盖掉。...那有没有办法不移动整个数组就完成覆盖呢?不难发现,我们要删除的元素只有一个,并且在最终的答案当中我们并不关心元素的顺序。...并且一共只能执行n次,虽然看起来我们也用了两重循环,但这仍然是一个 O(n) 的算法。

    52310

    顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)

    按照我们的方式任意对数据进行增删改查等操 作。最基础的数据结构:数组。 【思考】有了数组,为什么还要学习其他的数据结构?...// 这个循环用于将第一个位置之后的元素都向前移动一个位置,从而覆盖掉第一个位置的元素 while (start size) { /...pos时,执行循环 // 这个循环用于将pos位置及其之后的元素都向后移动一个位置,为插入新元素腾出空间 while (end >= pos) {...它首先通过断言确保要删除的位置是有效的,然后通过一个循环将指定位置之后的所有元素都向前移动一个位置,从而覆盖掉指定位置的元素。最后,它更新列表的大小。...int start = pos + 1; // 当start小于列表大小时,执行循环 // 这个循环用于将pos位置之后的元素都向前移动一个位置,覆盖掉

    26810

    【初阶数据结构与算法】复杂度分析练习之轮转数组(多种方法)

    我们来计算一下我们这种方法的时间复杂度    我们这种方法有两层循环,其中外层while循环的执行次数属于未知数,会运行k次,k可以非常大,内层的for循环的执行次数要看数组的元素个数,也属于未知数,...说不定那时就可以通过    在上面的方法1中我们每轮转一次就要将数组中的元素一个一个往后挪动,导致时间复杂度超出限制,于是在方法2中我们对它进行一个小小的优化,我们可以创建一个新的数组来一次性存放要移动的数据...,我们使用了两个for循环,但是是并列而不是嵌套的关系,所以时间复杂度为O(N),比上一个方法优化了很多    接着我们来看空间复杂度,我们创建了一个和原数组相同大小的数组,所以空间复杂度就是O(N)...主要是我们要理解,如果轮转数组大小次,那么相当于没有轮转,还是以前的样子,所以我们可以使用下面的方法来避免数组轮转多个循环: k = k % numsSize;    这样我们就可以保证数组不会多次循环轮转...k个元素,最后将整个数组逆置就可以使得数组轮转k次,我们要注意的是要理解为什么要使用k%=numsSize这条语句 最后的思考环节,这里我们的轮转是向右轮转,如果是向左轮转该怎么做呢?

    8510

    【最佳实践之性能篇】编码惯例与作用域意识

    with语句会创建自己的作用域,因此也会增长作用域链(在作用域链前端增加)。在with语句中执行的代码一定比其他外部作用域执行的更慢,因为它多了异步作用域查找。 选择正确的方法 1....O(logn) 对数 执行时间随着值的增加而增加,但算法完成不需要读取每个值。比如:二分查找 O(n) 线性 执行时间与值的数量直接相关。比如:迭代数组中的所有元素。...这意味着要避免属性查找或其他O(n)操作。 简化循环体。循环体是最花时间的。因此要尽可能优化。要确保其中不会包含轻松转移到循环外部的密集计算。 使用后测试循环do-while。...最常见的循环就是for循环和while循环,这两种循环都属于先测试循环。do-while 就是后测试循环,避免了对终止条件的初始评估,因此会更快,本人实测有效。...(valuse[i]); }while( --i >= 0 );// 注意这里是 --i,而没有使用i++为什么,不懂的评论区评论 可以自行测试一下,博主自测使用后测试循环执行时间比

    33220

    C语言题解 | 移除元素(多种解法)

    val,就执行一次任意位置删除 因为题目给的是数组,而非顺序表的常规结构,因此在设计任意删除函数时,需要多设计一个参数len ,不然就很难控制循环的终止 注意: 在实际写代码时,每删除一次元素...- 解法二、分离注入 这个解法也比较容易想到,就是 创建一个额外的 数组 ,对 原数组 进行 遍历判断 ,如果元素不等于 val ,就可以放入 新数组 中,遍历 结束后,需要把 新数组 中的元素注入 原数组...} ---- 解法三、双指针覆盖 这是一种比较巧妙的解法,用到了 双指针 ,对数组内元素进行覆盖,具体实现为:存在两个指针p1 、p2 ,两者初始都指向数组起始位置,遍历 整个数组,对指针 p1 和指针...= val) *p2++ = *p1; //覆盖后,p2要++ p1++; //p1需要一直向后移动 } return p2 - nums...的目标是找到 val ,而 右指针 的目标是找到非 val 的元素,两者交换,显然这需要在一个大循环内嵌套两个小循环,结束条件很讲究 ,大循环为 pleft 循环为 *pleft

    38840

    前端js基础教程

    1-100之间所有偶数的和 同时求1-100之间所有偶数和奇数的和 打印正方形 打印直角三角形 while语句 基本语法: // 当循环条件为true时,执行循环体, // 当循环条件为false时,结束循环...: 打印100以内所有偶数的和 do...while语句 do..while循环和while循环非常像,二者经常可以相互替代,但是do..while的特点是不管条件成不成立,都会执行一次。...数组 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:number/string。我们想存储班级中所有学生的姓名,此时该如何存储?...// 如果下标有对应的值,会把原来的值覆盖,如果下标不存在,会给数组新增一个元素。...主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。 构造函数用于创建一类对象,首字母要大写。 构造函数要和new一起使用才有意义。

    5710

    JDK1.8HashMap源码学习-put操作以及扩容(一)

    /** * 真正执行put的操作 * hash key的hash值 是通过hash函数计算得出 * key 我们要放入的key * value 要放入的值 * onlyIfAbsent true 不覆盖存在...key的值 * false 覆盖存在key的值 * put传入的false 即覆盖 * evict false 则处于创建模式 put传入true...接着循环 p = e; } } //e不为空 说明原先存在key相同的节点 执行是否覆盖操作 if...e; } } 即执行单向链表的挂载操作,刚进入循环p代表的是根节点 前面判断根节点是否为空进行的赋值操作,将p的下一节点赋值给e, 如果为空则直接创建新的节点并挂载到p节点的后面,接着判断桶中原节点数是否大于等于...直到完成挂载或者找到存在的key。 在退出循环后,如果是已存在的key,根据条件判断是否覆盖原值,HashMap是覆盖原值并返回旧值。

    55830

    Java面试题:HashMap为什么线程不安全、ConcurrentHashMap原理、ConcurrentHashMap与HashMap区别、Map总结

    文章目录1.HashMap 为什么线程不安全1.1 概述——HashMap线程不安全的体现、原因、改善1.2 jdk1.7中的线程不安全——死循环、数据丢失1.3 jdk1.8中的线程不安全——数据覆盖...(),如果两个线程并发执行 put 操作,并且两个数据的 hash 值冲突,就可能出现数据覆盖。...比如原来的顺序是AB,扩容后的顺序是BA,线程二执行结束。线程一:继续执行的时候就会出现死循环的问题。...如果没有扩容,则进行最后一步,先加锁,然后找到hash值相同的那个节点(hash冲突),循环判断这个节点上的链表,决定做覆盖操作还是插入操作。循环结束,插入完毕。...通过key定位到数组下标是否为空;判断node节点第一个元素是不是要找到,如果是直接返回;如果是红黑树结构,就从红黑树里面查询;如果是链表结构,循环遍历判断。

    18310

    100道最新Java面试题,常见面试题及答案汇总

    封装可以帮助程序员遵循模块化方法进行软件开发,每个对象都有自己的一组方法和变量,并且可以独立于其他对象来执行其功能。另外,封装也有数据隐藏的目的。...答案:循环用于编程中重复执行语句,Java中的循环有三类: 1、for循环 for循环用于执行指定重复次数的语句,当程序员明确知道循环次数可以使用for循环。...2、While循环 当语句满足条件时开始进行重复执行,直到语句不再满足条件退出循环。While循环中在执行语句之前先检查是否满足条件。...3、do while循环 Do while 和while循环基本类似,唯一不同的是do while是先执行语句再检查条件,也就是说do while循环至少会执行一次语句。 Q7:什么是无限循环?...答案:try后面往往会跟着catch或finally,try抛出的任何异常都会被捕获在catch中,在代码终止前的要执行的任务放在finally中。

    5.2K21

    【1】进大厂必须掌握的面试题-Java面试-基础

    main:这是JVM搜索的方法的名称,它是仅具有特定签名的应用程序的起点。这是主要执行发生的方法。 String args []:这是传递给main方法的参数。 Q3。为什么Java是平台独立的?...Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。可以通过将构造函数设为私有来使类成为单例。 Q8。Java中的数组列表和向量有什么区别? 数组列表 向量 阵列列表未同步。...生命周期 存在,直到线程执行结束。 堆内存从应用程序执行的开始一直到结束。 用法 堆栈内存仅包含堆空间中对象的局部原语和引用变量。 每当创建对象时,它总是存储在堆空间中。 Q11。...打破 继续 1.可以在switch和loop(for,while,do While)语句中使用 1.只能与循环语句一起使用 2.它会使switch或loop语句在执行时终止 2.它不会终止循环,但会导致循环跳至下一个迭代...3.终止最里面的封闭回路或立即切换 3.在嵌套有开关的循环内继续执行将导致执行下一个循环迭代 中断示例: for (int i = 0;i < 5;i++){ if (i == 3){

    1.7K00

    Java面试基本问题

    String args []:这是传递给main方法的参数。 Q3。为什么Java是平台独立的?...生命周期 存在,直到线程执行结束。 堆内存从应用程序执行的开始一直到结束。 用法 堆栈内存仅包含堆空间中对象的局部原语和引用变量。 每当创建对象时,它总是存储在堆空间中。 Q11。...打破 继续 1.可以在switch和loop(for,while,do While)语句中使用 1.只能与循环语句一起使用 2.它会使switch或loop语句在执行时终止 2.它不会终止循环,但会导致循环跳至下一个迭代...3.终止最里面的封闭回路或立即切换 3.在嵌套有开关的循环内继续执行将导致执行下一个循环迭代 中断示例: for (int i = 0;i < 5;i++){ if (i == 3){...什么是Java中的无限循环?举例说明。 无限循环是Java中的一个指令序列,当不满足功能退出要求时,它会无限循环。这种类型的循环可能是编程错误的结果,也可能是基于应用程序行为的故意行为。

    1.1K20

    Java基础知识精华部分.

    3)、当某些语句需要执行很多次时,就用循环结构。 while和for可以进行互换。 区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。...要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。 continue:只作用于循环结构,继续循环用的。 作用:结束本次循环,继续下次循环。...主函数: 1)、保证该类的独立运行。 2)、因为它是程序的入口。 3)、因为它在被jvm调用。 函数定义名称是为什么呢? 答:1)、为了对该功能进行标示,方便于调用。...3,通过Thread类创建线程对象; 4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。 为什么要传递呢?因为要让线程对象明确要运行的run方法所属的对象。...//因为要使用read(char[])方法,将读取到字符存入数组。所以要创建一个字符数组,一般数组的长度都是1024的整数倍。

    1.1K90

    Java面试之关键字

    ,而不需要创建对象就可以访问 void:表示该方法没有返回值 main:主方法,程序的开始 (String[] args):参数,传递进来一个字符串数组的参数 sizeof 是Java 的关键字吗 不是...简单来说:静态属性随着类的加载而加载,静态类不能创建对象,直接用类名来调用 main() 方法为什么必须是静态的?...|类型 while 循环和 do 循环有什么不同 while语法格式: while(布尔表达式){ //语句 } 如果布尔表达式为真就会执行循环体中的语句然后在判断该布尔表达式如果还为真的话就会执行循环体中的语句一直到布尔表达式为...false,然后循环结束 do/while语法格式: do{ //语句 }while(布尔表达式) 先执行一次循环体,然后再判断布尔表达式是否为真,如果为真的话就继续执行循环体,再判断布尔表达式,知道布尔表达式为假就结束循环...两者的区别:while是先判断在执行如果判断不成立,就不会执行;do/while是先执行在判断,不管判断是否成立都会执行一次 备注:问题来源于唐尤华 当然,仅仅依靠这些还是不够的,还是需要多加代码联系和多读书的

    646100

    java集合概念_java多线程

    如果要在一个HashMap实例中存储许多映射,那么以足够大的容量创建它将使映射的存储效率更高,而不是让它根据需要执行自动重新缓存以增加表。...(1.7死循环,1.8数据覆盖) 二、HashMap的数据结构 1.底层实现 既然HashMap叫这个名字,那他的实现必然是基于哈希表的,关于哈希表我在数据结构与算法(十):哈希表已有介绍。...为什么? 另外,我们知道在JDK7中HashMap底层实现只是数组+链表,而到了JDK8就变成了数组+链表+红黑树。...事实上,HashMap的线程不安全在JDK7和JDK8表现不同: 在JDK7因为resize过程使用了头插法,导致多线程环境下可能会产生死循环,数据覆盖和数据丢失等问题 JDK8解决了死循环问题,但是在扩后的添加中仍然会在多线程环境下出现数据覆盖的问题...2.JDK8数据覆盖 DK7中也有这个问题。 我们知道put()方法在插入时会对插入位置进行非空判断,如果两个线程都判断同一个位置为空,那么先执行插入的数据就会被后一个覆盖。

    30320
    领券